2011-07-15 30 views
0

私は、ドロップダウンボックスのどの項目が選択されているかに応じて2つの画像を交互に表示する、本当に基本的なプログラムを作成しようとしています。これは実行しようとしているコードですが、次のようなエラーが表示され続けます。Javaコンボボックス+画像アイコン

Exception in thread "main" java.lang.NullPointerException 
at javax.swing.ImageIcon.<init>(ImageIcon.java:181) 
at Gui.<init>(Gui.java:10) 
at Apples.main(Apples.java:7) 

イメージはsrcファイルにあります。

誰かが私が間違っていることを知っていますか? おかげで、私は違うのgetResource(String)をメソッドの説明を入れて ラヴィン

this screenshot demonstrates that the images are in the src file

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Gui extends JFrame{ 

private JComboBox box; 
private JLabel picture; 
private static String [] filename = {"Ravinsface.png", "Wojs face.png"}; 
private Icon[] pics = {new ImageIcon(getClass().getResource(filename[0])), new  ImageIcon(getClass().getResource(filename[1]))}; 

public Gui(){ 
super("The Title"); 
setLayout(new FlowLayout()); 
box = new JComboBox(filename); 
box.addItemListener(
new ItemListener(){ 
public void itemStateChanged(ItemEvent event){ 
    if(event.getStateChange()==ItemEvent.SELECTED); 
    picture.setIcon(pics[box.getSelectedIndex()]); 

} 
} 

); 
add(box); 
picture = new JLabel(pics[1]); 
add(picture); 


} 

} 
+0

私はスクリーンショットのファンですが、この場合は例外スタックトレースにpr画像内のすべてのビットの情報(1,241px×1,042pxと150Kb以上)を取得し、**ロット**バイトを減らしました。 –

+0

チュートリアルに従ってくださいhttp://download.oracle.com/javase/tutorial/uiswing/components/icon.html – mKorbel

答えて

1

利用のgetClass()。のgetClassLoader()。getResourceの(文字列)

/E1他の答え。

+0

私は完全な初心者です。getClassLoaderが何をしているのか説明できますか? – Ravin

+0

ClassLoadersはクラスのロードを担当します。つまり、.classファイルの名前を指定すると、.classファイルのクラスを作成する必要があります。すべてのクラスはClassLoaderによってロードされ、すべてのクラスにはロードされたClassLoaderへの参照が含まれます。 – Jeffrey

1

ImageIconコンストラクタに渡す引数の1つ(またはそれ以上)がnullのようです。

private Icon[] pics = {new ImageIcon(getClass().getResource(filename[0])), new  ImageIcon(getClass().getResource(filename[1]))}; 

なぜあなたはちょうど

new ImageIcon(String filename) 

を使用していない:リソースがここに発見されていないためですか?私はgetResourceがどのように動作するかを100%確信しているわけではありません。

+0

Class.getResource(String)は、リソースのパッケージ内を検索します。 ClassLoader.getResource(String)は、リソースのソースフォルダを探します。 新しいImageIcon(String)は、リソースのソースフォルダ外にあります。 – Jeffrey

0

この操作を行います。 あなたは(PROJECT_NAME/binに)あなたの.classファイル

の横にあなたの.png

を置く必要があり、あなたのファイルのパスが

を認識することができ、それは が覚えて働くだろうしクラスローダーを使用していますので、.classファイルの横に画像を置くと正しくなります

関連する問題