- ベストアンサー
アプレットに画像が表示されません
- java初心者の方が作成したプログラムで、アプレットに画像が表示されません。
- 画像はeclipseで同じプロジェクト(フォルダ)内に置かれていますが、文法上のエラーはありません。
- 原因がわからず、困っています。何か解決策を教えていただけないでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
paintを呼び出しているメソッドから見ます。 私ので言うと、 paintを呼び出す際、グラフィック情報を格納しているアドレス=1000番地を渡します。 paint(Graphics g2)によって、g2に1000番地が入ります。 g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; によって1000番地にimgが描かれます。 あなたので言うと、 paintを呼び出す際、グラフィック情報を格納しているアドレス=1000番地を渡します。(これは同じ) paint()としてしまうと1000番地が受け取れません。 Graphics g2 = getGraphics(); は新しく取ったアドレス=1100番地に g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; imgを書き込みます。 1000番地は変更されていません。
その他の回答 (4)
- maiko0318
- ベストアンサー率21% (1483/6969)
paintを呼び出しているメソッドは Graphicsの情報があるアドレスを渡してきているのです。 それで、paint(Graphics g2) で受け取れるのです。 アドレスをもらっていますから、この中で中身を変更することで imgをpaintを呼び出しているメソッドに返すことが出来るのです。 Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; これは、新しくGraphicsタイプの領域を取り、imgを描いているだけであって paintを呼び出しているメソッドに返ることはないのです。
お礼
maiko0318さん、回答有難うございます。 すみません、Javaの基本的内容が理解出来ていないようです、再度宜しくお願い致します。 >paintを呼び出しているメソッドは >Graphicsの情報があるアドレスを渡してきているのです。 #しかし、Graphics g2 = getGraphics();も、Graphicsの情報があるアドレスをg2に渡している のではないのでしょうか。 引数スタイル(? paint(Graphics g2)とGraphics g2 = getGraphics();との意味の違い (>imgをpaintを呼び出しているメソッドに返すことが出来ない理由)が理解できません。
- maiko0318
- ベストアンサー率21% (1483/6969)
>#paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。 こちらでテストしたところ、直りましたが。 paintのパラメータ受け取りに指定したg2にdrawImageするのです。 受け取っていないものにdrawImageしてもpaintを抜ければ消えてしまいます。
お礼
maiko0318さん、回答有り難うございました。 再度確認しましたらうまく動作しました、早トチリですみませんでした。 ところで、私の書いたコードとmaiko0318さんの書いたコードの違いが判りません。 ========================================================= public void paint( ) { Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; } ========================================================== # paintメソッドの中で、Graphics g2 ・・・・ローカル変数定義とGraphics()の取得、 取得した、g2にdrawImageをしていますが。 この書き方では、g2はdrawImageを受け取れないのでしょうか。 ここの意味が理解できません、宜しくお願いします。
- maiko0318
- ベストアンサー率21% (1483/6969)
paintのg2定義を直せばいいです。 public void paint(Graphics g2) { g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; }
お礼
maiko0318さん、回答有難うございます。 回答のとおりにコードを変更しましたが、何も変化ありません。 >paintのg2定義を直せばいいです。 #paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。
これだけですと、状況がわからないので何とも原因が特定しにくいです。とりあえずチェックポイントだけ。 ・a.jpgはどこにありますか。htmlファイルと同じ場所ですか。 ・getDocumentBaseでなく、getCodeBaseでコードの配置場所に置いた場合もやはり読み込めませんか? ・Eclipseは実行する際、ビルドしたプログラムを別の場所に保存して実行しますが、ちゃんとイメージもそこに配置できていますか。 ・プログラムはどういう形になっていますか。クラスファイルがそのままおかれていますか、Jarにまとめられていますか。 以上を確認してみてください。この種の問題で一番多いのは、画像ファイルが正しく配置できておらず読み込めない、というものです。次に多いのは、Jarファイルにプログラムをまとめているためにファイルが読めない(Jarにまとめるとファイルでなくリソースとして読み込まないといけない)。以上の2つが原因の大半を占めると思います。
お礼
maiko0318さん、回答有難う御座います、お礼が遅くなりすみません。 色々と他の参考書なども読んでみましたが、やはり、よく理解できませんでした。 >paint()としてしまうと1000番地が受け取れません。 #ということは、paint( )と呼び出すときは、必ずpaint(Graphics g2)の型で使わなければならない ということでしょうか。 /* public void ppaint2( ) { Graphics g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 150 , 150 , this ) ; } */ のように書き換えてもやはりエラ-でした。 宜しくお願いします。