我正在尝试构建一个真正基本的程序,它将在两张图片之间切换,具体取决于选择下拉框中的哪个项目。这是我正在尝试运行的代码,但我一直收到错误说:
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文件中。
有谁知道我做错了什么? 谢谢, 猎食
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 :(得分: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文件旁边那就是正确的