2012-03-22 12 views
-3

この質問は、私が知っていると私は知っていると私はここで同じ質問の4または5を読んだが、誰も助けていないと言う前に。画像がJavaアプレットに表示されない

私はgetdocumnetbase、getcodebase、バッファリングされたイメージを単なるイメージと比較しようとしました。私の状況を助けるものはありません。

私の問題は、アプレットを実行すると画像が表示されないことです。私はアプレットにボタンが追加されているかどうかを確認するためにボタンを追加しましたが、実際には上にマウスを置いたり、ウィンドウのサイズを変更したりしない限り、実際には動きません。

現在のところ、アペルトは画像とボタンを表示していますが、動作していません。だから私は失われている。

public void init() { 

    JPanel panel = new JPanel() 
    { 
     public void paintComponent(Graphics g) 
     { 
      BufferedImage img = null; 
      try { 
       img = ImageIO.read(new File("..\\gifs\\Assembled.jpg")); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      System.out.println("inside JPanel"); 
      g.drawImage(img, 0, 0, this); 

      super.paintComponent(g); 
     } 
    }; 

    JButton j = new JButton("hi"); 
    panel.add(j); 
    add(panel); 

addMouseListener(this); 
repaint(); 
} 

感謝:

は、ここでは、コードです。

これであなたはこれを投票しました(そして私を助けなかった)ので、誰かが実際に助けることができるかどうかを確認できます。

ます。public voidのinit(){

JPanel panel = new JPanel(){ 

    public void paintComponent(Graphics g) 
    { 
     Image i = null; 
     try { 
      i = getImage(new URL(getCodeBase(), "../gifs/Assembled.jpg")); 
     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     System.out.println("inside JPanel"); 
     g.drawImage(i, 0, 0, this); 

     //super.paintComponent(g); 
    } 
    }; 



    this.setLayout(new BorderLayout()); 
    panel.setSize(500,500); 
    add(panel, BorderLayout.CENTER); 
    addMouseListener(this); 
    //repaint(); 
} 

私は、コードを編集したが、まだ何も機能しません。イメージは見つかって読み込まれますが、アプレットのサイズを変更しない限り表示されません。言い換えれば、画像はサイズ変更中のみ表示され、他の時間は表示されません。今、何が起こるでしょうか?ああ、それは私がsupper.paintComponent(g);への呼び出しを取り除いた場合にのみ表示されます。

私がこれを投稿してから始める前に、あなたのリンクは私がどのように答えを試したか見るのを助けませんでした。

+3

*「私は知っているし、同じ質問の4つまたは5つを読んだ」*どの4つまたは5つですか?そしてそれは私がリンクを意味することによって。私はこの質問に過去72時間以内に少なくとも2回答えなければならないでしょう。 –

+1

[Applet image missing](http://stackoverflow.com/questions/7256095/applet-image-missing)&[localhostの画像を表示できません](http://stackoverflow.com/questions/5989606)/cant-display-images-localhost /)&[Javaアプレットでビットマップイメージを表示する方法は?](http://stackoverflow.com/questions/1045279/how-can-i-display-a- –

+0

*「アプレットにボタンが追加されているかどうかを確認するためにボタンを追加しましたが、上にカーソルを置いたり、ウィンドウのサイズを変更しない限り、実際には表示されません。もう一つ別の問題。 –

答えて

2

アプレットはWebサーバーによって提供されます。これは、アプレットのコードをダウンロードして実行するWebブラウザです。したがって、アプレットはウェブブラウザの実行場所と物理的に同じマシンで実行されます。

次の行

img = ImageIO.read(new File("..\\gifs\\Assembled.jpg")); 

ファイルがウェブブラウザがウェブブラウザによって実行されるJVMの作業ディレクトリに対して、実行するマシンのローカル・ディスク・ファイル・システムに存在することが期待。 ではありません。は、Webサーバー内のファイルを指します。また、アプレットのJARファイルにパッケージされているファイル(存在する場合)を指します。もちろん、エンドユーザが特定のイメージファイルをすでにローカルディスクファイルシステムに用意しているとは限りません。

ファイルが実際にのどこにあるかによって、その部分を変更する必要があります。

アプレットがダウンロードされたURL(実際にはコードベース)からWebサーバーに格納されている場合は、代わりにURLでファイルを取得する必要があります。

img = ImageIO.read(new URL(getCodeBase(), "gifs/Assembled.jpg")); 

アプレットがhttp://example.com/contextname/applet.jarによって配信される、上記の例では、http://example.com/contextname/gifs/Assembled.jpgによって利用できるように画像を想定していることを想像。

実際にアプレットJARファイルにパッケージ化されている場合は、代わりにクラスパスでファイルを取得する必要があります。その後、あなたは次のようにクラスパスでそれを取得する必要があり、あなたがアプレットJARファイルの/META-INF/gifs/Assembled.jpgでそれを保存したことを想像して:

img = ImageIO.read(getClass().getResourceAsStream("/META-INF/gifs/Assembled.jpg")); 

ところで、JPGファイルはGIFファイルではありません。私は "gifs"を "images"や何かに改名することを提案します。

関連する問題