アプレットに画像が表示されません

このQ&Aのポイント
  • java初心者の方が作成したプログラムで、アプレットに画像が表示されません。
  • 画像はeclipseで同じプロジェクト(フォルダ)内に置かれていますが、文法上のエラーはありません。
  • 原因がわからず、困っています。何か解決策を教えていただけないでしょうか?
回答を見る
  • ベストアンサー

アプレットに画像が表示されません

 今晩は、java初心者です、宜しくお願いします。  下のようなプログラムを書きましたが、画像がアプレットに表示されません。  画像はeclipseで同じプロジェクト(フォルダ)内に置いています。  文法上のエラーは出ておりません。  原因がわかりません宜しくお願いします。 ============================ public class Test extends Applet { MediaTracker tracker ; Image img ; public void init() {   tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() {              try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( )      { Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; } }

  • Java
  • 回答数5
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.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番地は変更されていません。

westwest_2007
質問者

お礼

 maiko0318さん、回答有難う御座います、お礼が遅くなりすみません。  色々と他の参考書なども読んでみましたが、やはり、よく理解できませんでした。  >paint()としてしまうと1000番地が受け取れません。  #ということは、paint( )と呼び出すときは、必ずpaint(Graphics g2)の型で使わなければならない ということでしょうか。  /* public void ppaint2( ) { Graphics g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 150 , 150 , this ) ; }  */ のように書き換えてもやはりエラ-でした。  宜しくお願いします。

その他の回答 (4)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.4

paintを呼び出しているメソッドは Graphicsの情報があるアドレスを渡してきているのです。 それで、paint(Graphics g2) で受け取れるのです。 アドレスをもらっていますから、この中で中身を変更することで imgをpaintを呼び出しているメソッドに返すことが出来るのです。 Graphics g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; これは、新しくGraphicsタイプの領域を取り、imgを描いているだけであって paintを呼び出しているメソッドに返ることはないのです。

westwest_2007
質問者

お礼

 maiko0318さん、回答有難うございます。  すみません、Javaの基本的内容が理解出来ていないようです、再度宜しくお願い致します。  >paintを呼び出しているメソッドは  >Graphicsの情報があるアドレスを渡してきているのです。  #しかし、Graphics g2 = getGraphics();も、Graphicsの情報があるアドレスをg2に渡している のではないのでしょうか。  引数スタイル(? paint(Graphics g2)とGraphics g2 = getGraphics();との意味の違い (>imgをpaintを呼び出しているメソッドに返すことが出来ない理由)が理解できません。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

>#paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。 こちらでテストしたところ、直りましたが。 paintのパラメータ受け取りに指定したg2にdrawImageするのです。 受け取っていないものにdrawImageしてもpaintを抜ければ消えてしまいます。

westwest_2007
質問者

お礼

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/6970)
回答No.2

paintのg2定義を直せばいいです。 public void paint(Graphics g2) { g2 = getGraphics(); g2.drawImage( img , 0 , 0 , 50 , 50 , this ) ; }

westwest_2007
質問者

お礼

 maiko0318さん、回答有難うございます。  回答のとおりにコードを変更しましたが、何も変化ありません。  >paintのg2定義を直せばいいです。  #paintのg2定義を直してもプログラムとしての構成は何も変わらないと思うのですが。

noname#247307
noname#247307
回答No.1

これだけですと、状況がわからないので何とも原因が特定しにくいです。とりあえずチェックポイントだけ。 ・a.jpgはどこにありますか。htmlファイルと同じ場所ですか。 ・getDocumentBaseでなく、getCodeBaseでコードの配置場所に置いた場合もやはり読み込めませんか? ・Eclipseは実行する際、ビルドしたプログラムを別の場所に保存して実行しますが、ちゃんとイメージもそこに配置できていますか。 ・プログラムはどういう形になっていますか。クラスファイルがそのままおかれていますか、Jarにまとめられていますか。 以上を確認してみてください。この種の問題で一番多いのは、画像ファイルが正しく配置できておらず読み込めない、というものです。次に多いのは、Jarファイルにプログラムをまとめているためにファイルが読めない(Jarにまとめるとファイルでなくリソースとして読み込まないといけない)。以上の2つが原因の大半を占めると思います。

関連するQ&A

  • アプレットにテキストボックスが表示されません

     こんばんは、Java初心者です、宜しくお願いします。  アプレットを表示、背景に画像を表示させ、テキストボックス に文字、数字を入力するプログラムを書きました。  背景の画像は表示されるのですが、テキストボックスは 表示されません。  何故でしょうか、原因がよく分かりません。 宜しくお願い致します。 ============================================== public class TextboxTest extends Applet { MediaTracker tracker ; Image img ; TextTest tet ; public void init() { tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g2 ) { g2 = getGraphics(); g2.drawImage( img , 50 , 50 , 250 , 250 , this ) ; } public void abc( ) { tet = new TextTest() ; } } //=================================================================== class TextTest extends Applet implements ActionListener { JTextField jt0 ; Double lon = 0.0 ; public void init() { setLayout( null ) ; jt0 = new JTextField( "" ) ; jt0.setBounds( 150 , 150 , 100 , 30 ) ; this.add( jt0 ) ; Button bt = new Button( "Input" ) ; bt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; Color d = new Color( 0xff00ff ); bt.setBackground( d ) ; bt.setForeground( new Color( 0.0f , 0.0f , 0.0f ) ) ; bt.setBounds( 100 , 200 , 220 , 40 ) ; bt.addActionListener( this ) ; this.add( bt ) ; } public void actionPerformed( ActionEvent ae ) { jttest(); } void jttest() { try { String str_lon = jt0.getText() ; lon = Double.parseDouble( str_lon ) ; System.out.println( "lon =" + lon ) ; } catch( Exception ee ) { } } }

    • ベストアンサー
    • Java
  • 画像がうまく表示されません

    下のプログラムを実行すると、 最初の読みこみはうまくいくのですが、(一部出なくなる画像がありますが…) Internet Explorerの更新ボタンを押した時、 (1)の部分で止まってしまうようで、画像が表示されなくなります。 (ローカルドライブで実行した場合はうまく表示できるのですが、ネットワークで実行した場合にこのようになってしまいます) import java.applet.Applet; import java.awt.*; public class met extends Applet{ Image img[] = new Image[6]; MediaTracker mt; public void init(){ mt = new MediaTracker(this); for(int i = 0;i < 6;i++){ img[i] = getImage(getCodeBase(),i+".gif"); mt.addImage(img[i],0); } try{ mt.waitForID(0); }catch(InterruptedException e){} } public void paint(Graphics g){ // (1) if(!mt.checkID(0)){ g.clearRect(0,0,500,500); g.drawString("読み込み中",200,240); return; } g.setColor(Color.white); g.fillRect(0,0,500,500); for(int i = 0;i < 6;i++){ g.drawImage(img[i],i*50,0,this); } } }

    • ベストアンサー
    • Java
  • 【Java】画像表示が出来ない!

    Java初心者です。 Eclipseを使って、Javaアプレットでjpeg画像を表示させようとしたのですが、上手くいきません。表示したい画像をインポートして、このようなコードを書きました。 import java.applet.Applet; import java.awt.*; /* <applet code="クラス名.class" width="497" height="600"> <param name="img" value="img/test.jpg"> </applet>*/ public class クラス名 extends Applet { Image img; public void init() { img = getImage(getDocumentBase() , getParameter("/test.jpg")); } public void paint(Graphics g) { g.drawImage(img , 0 , 0 , this); } } Javaアプレットで実行しても、アプレットは真っ白なままです。GIF画像でも試してみましたが、同じく失敗でした。他のJavaアプレットのプログラム(図形を表示したり)は成功したので、私のパソコンのJavaは問題ないと思います。回答よろしくお願いします。

    • ベストアンサー
    • Java
  • appletの画像が表示されない

     画像を表示するappletを作ったんです。  コマンドのappletviewerでは確認出来るんですが、IEでは何故か表示されません。何故なんでしょう?  WINXP/IE6.0.2600です。  以下にコードを記述します。 import java.awt.*; import java.applet.*; public class test extends Applet {  Image img;  public void init() {   img = getImage(getDocumentBase(), "test.PNG");  }  public void paint(Graphics g) {   g.drawImage(img, 10, 10, this);  } }

    • ベストアンサー
    • Java
  • Java アプレットで画像をコピーして配置

    Javaアプレットでなのですが、画面上に自分で持っている画像をコピーして配置したいです。 http://oshiete1.goo.ne.jp/qa2452081.html​ のソースを参考にさせて頂いたのですが、 コピー元のオブジェクトを自分の持っている画像(アイコン)にしたいです。 Path指定をするとできるのかなと思っていて、以下の2行を加えてみたのですができません。 img[0] = getImage(getDocumentBase(), "../../img/01.jpg"); g.drawImage( img[0],20,20, this ); ご教授よろしくお願いします。

    • ベストアンサー
    • Java
  • 画像を表示させるプログラム

    こんばんわ。 現在、Javaで画像を表示させるアプレットを作っているのですが、画像が表示されません。 書いたソースは以下です。 import java.applet.Applet; import java.awt.*; /* <applet code="Panel.class" width="497" height="600"> </applet> */ public class Panel extends Applet { Image data; public void init() { data = getImage(getDocumentBase(),"2-1.gif"); } public void paint(Graphics g) { g.drawImage(data, 0, 0, data.getWidth(this), data.getHeight(this), this); } } 2-1.gifという画像ファイルを表示させたいと思っています。画像ファイルはソースファイルと同じディレクトリにあります。appletviewerで実行しているのですが画像がさっぱり表示されません。 SDKのバージョンは1.5を使っています。 お手数おかけしますが、ご教授の程よろしくおねがいします。

    • ベストアンサー
    • Java
  • テキストボックス、ボタンが見えません、画像の影響で

     Java初心者です、宜しくお願いします。  アプレットに画像とテキストボックス、ボタンを張り付ける プログラムを書きましたが、実行すると画像を張り付けているためか、 テキストボックスが指定した大きさに見えず、せいぜい1文字程度の 大きさにしか表示されません。  また、ボタンも実行後には見えない状態で、マウスでクリックする と見えるようになります。  最初から、指定した大きさで、テキストボックス、ボタンを表示させる方法は あるのでしょうか。  また、別のクラスでパネルに色をつけていますが、全く実行されて いないようです。  この原因が分かりません、何故でしょうか。  以上宜しくお願いします。 ======================================================== public class Sample1 extends JApplet { private static final long serialVersionUID = 1L; MediaTracker tracker ; Image img ; Text1 t1 ; public void init() { Container cnt = getContentPane( ); setLayout( null ) ; t1 = new Text1( ) ; t1.init( ) ; cnt.add( t1 ) ; tracker = new MediaTracker( this ) ; img = getImage( getDocumentBase() , "../a.jpg" ) ; tracker.addImage( img , 0 ) ; } public void start() { try { tracker.waitForAll(); } catch (InterruptedException e) { } } public void paint( Graphics g ) { g.drawImage( img , 50 , 50 , 300 , 300 , this ) ; } } //=================================================================== class Text1 extends JPanel { private static final long serialVersionUID = 1L ; JTextField jtf ; public void init( ) { setLayout( null ) ; setBackground( Color.yellow ) ; setBounds( 30 ,30 ,500 , 500 ) ; jtf = new JTextField( "abcde" ) ; jtf.setBounds( 150 , 150 , 100 , 30 ) ; add( jtf ) ; JButton jbt = new JButton( "Check" ) ; jbt.setFont( new Font( "SansSerif" , Font.BOLD , 20 ) ) ; jbt.setBackground( Color.red ) ; jbt.setForeground( Color.blue ) ; jbt.setBounds( 100 , 200 , 220 , 40 ) ; this.add( jbt ) ; } }

    • ベストアンサー
    • Java
  • ★Appletで画像読み込み&画像表示★

    import java.awt.*; import java.applet.*; public class S1 extends Applet { Image img; public void init() { img=getImage(getCodeBase(),"sample.jpeg"); } public void paint(Graphics g){ g.drawImage(img,50,50,this); } } 以上プログラムでアプレット上に拡張子がjpeg形式のsampleという100*100の画像を表示しようとしています。 クラス名はS1で問題なくエラーもありません。 java関連のサイトでも同じようにして画像が表示できるとされていたのですが、私のパソコンではアプレット上には何も表示されないまま、アプレットのみが起動するという状態になりました。 Eclipse SDKというものを使用していますが、それが原因なのかどうかもわからず困っています。 お手数をお掛けしますが、回答の程よろしくお願いします。

    • ベストアンサー
    • Java
  • 画像がうまく表示されない。

    アプレットを作っています。 左クリックすると、次の画像へ進む、といった処理を実装したのですが、1回は次の画像へ進むのですが、2回目以降が進みません(しかも、「1.jpg」から「2.jpg」へ進めたいのですが、何故か「1.jpg」から「10.jpg」にいってしまいます。)以下が現在のコードです。 余分な部分は削除しました。よろしくお願いします。 public class Main extends Applet implements MouseListener, Runnable{ Image nowImage, nextImage; static int i; MediaTracker mt = new MediaTracker(this); MediaTracker mt2 = new MediaTracker(this); int yousosu,w,h; Thread thread; static float alpha; static boolean runflag = true; static boolean flag = true; static int j = 1; Image buf; Graphics ct; int sleeptime = 300; Image img; Vector imgs = new Vector(); public void init(){ i = 0; thread = new Thread(this); yousosu = Integer.parseInt(getParameter("NumImage"));//配列(画像)の要素数 for(int t = 0; t < yousosu; t++){ img = getImage(getDocumentBase(),"imagesyukusyo/" + t+1 + ".JPG"); imgs.addElement(img); img = null; } int kazu = imgs.size(); addMouseListener(this); w = getSize().width; h = getSize().height; buf = createImage(w,h);//バッファ取得 //*******最初の画像のロード******* nowImage = getImage(getDocumentBase(), "imagesyukusyo/1.JPG");//←Vectorの[0]要素? } public void update(Graphics g){ paint(g); } public void paint(Graphics g){//drawImageファイルを表示するだけ ct = buf.getGraphics(); Graphics2D ct2 = (Graphics2D) ct; Graphics2D g2 = (Graphics2D) g;//Grahics2Dクラス AlphaComposite composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); mt.addImage(nowImage,0); mt2.addImage(nextImage, 0); try { mt.waitForID(0); mt2.waitForID(0); } catch (InterruptedException e) { e.printStackTrace(); } ct2.drawImage(nowImage,0,0,w,h,this); ct2.setComposite(composite); //次からはcompositeを設定した後の描画になる。 ct2.drawImage(nextImage,0,0,w,h,this); g2.drawImage(buf,0,0,w,h,this); } //*********マウスイベント************ public void mouseClicked(MouseEvent e) { int btn = e.getButton(); //*******左クリック********** if(btn == MouseEvent.BUTTON1){//左クリック=進め System.out.println("左クリック"); System.out.println("iは"+i); System.out.println("elementAtの数は"+imgs.size()); if(i >= yousosu){//要素数より多くなったら… i = 0; } nowImage = (Image)imgs.elementAt(i); if(i == yousosu-1){ nextImage = (Image) imgs.elementAt(0); }else{ //通常こっち nextImage = (Image) imgs.elementAt(i+1); } thread = new Thread(this); thread.start(); thread = null; i++; } } public void run(){ alpha = 0.2f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.3f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.4f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.5f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.6f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.7f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.8f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 0.9f; repaint(); try { thread.sleep(sleeptime); } catch (InterruptedException e) { e.printStackTrace(); } alpha = 1f; repaint(); } }

    • ベストアンサー
    • Java
  • 画像表示アプレットプログラムについて

    Javaのプログラムを勉強中です。 javaを理解するために下記のプログラム(zukei.java)を作成しました。 このプログラムを実行(appletviewer zukei.java)すると エラーにはなりませんが、(3)の行により画像("b.jpg")がすぐには表示されません。表示されたWindowにほかのWindowをいったんのせてから動かすと(3)行により画像"b.jpg"が表示されます。 (1)(2)の行は最初からうまく動作して表示されます。 もちろん(3)のappletをthisにするとうまく動作します。 理由がわかりません。 どなたかご教授ください。 プログラム zukei.class *<APPLET CODE="zukei.class" WIDTH=500 HEIGHT=500></APPLET> */ import java.applet.*; import java.awt.Graphics; import java.awt.*; public class zukei extends Applet { Applet applet; Image myimage; int iKai; public zukei(){ applet = this.applet; } public zukei(Applet applet) { this.applet = applet; } public void init(){ iKai = 0; myimage = getImage(getDocumentBase(),"b.jpg"); } public void paint(Graphics g) { kaku(); //(1) g.drawArc(100,150,50,50,0,360); //(2) g.drawImage(myimage,10,300,180,180,applet); //(3) } public void kaku(){ System.out.println("ABC" + iKai++); } }

専門家に質問してみよう