Java组合框+图像图标

时间:2011-07-15 17:44:23

标签: java eclipse

我正在尝试构建一个真正基本的程序,它将在两张图片之间切换,具体取决于选择下拉框中的哪个项目。这是我正在尝试运行的代码,但我一直收到错误说:

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文件中。

有谁知道我做错了什么? 谢谢, 猎食

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);


}

}

3 个答案:

答案 0 :(得分:1)

使用getClass()。getClassLoader()。getResource(String)

/ e1我在另一个答案中解释了不同的getResource(String)方法。

答案 1 :(得分:1)

看起来您传递给ImageIcon构造函数的一个(或多个)参数为null。这是因为这里找不到资源:

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

你为什么不只是使用

new ImageIcon(String filename)

?我不是100%确定getResource如何工作,从未使用它。

答案 2 :(得分:0)

这样做: 你必须把你的.png

在.class文件旁边 (在project_name / bin中)

然后您的文件路径可以识别

然后它会起作用 记住你正在使用类加载器,所以如果你把图像放在.class文件旁边那就是正确的