我正在尝试创建一个显示从组合框中选择颜色的小方框。但是当我尝试运行程序时,我不断收到NullPointerException的错误。我不明白它有什么问题。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ThreeColorsFrame extends JFrame
{
private static final int FRAME_WIDTH = 300;
private static final int FRAME_HEIGHT = 400;
private JComboBox box;
private JLabel picture;
private static String[] filename = { "Red", "Blue", "Green" };
private Icon[] pics = { new ImageIcon(getClass().getResource(filename[0])),
new ImageIcon(getClass().getResource(filename[1])),
new ImageIcon(getClass().getResource(filename[2])) };
public ThreeColorsFrame()
{
super("ThreeColorsFrame");
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[0]);
add(picture);
}
}
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at ThreeColorsFrame.<init>(ThreeColorsFrame.java:33)
at ThreeColorsViewer.main(ThreeColorsViewer.java:36)
答案 0 :(得分:2)
您的问题是您尚未初始化picture
。
private JLabel picture;
但是之前从未设置过:
picture.setIcon(...);
在构造函数中调用,尽管是在一个条件下。
您需要初始化它,例如
picture = new JLabel(...); // whatever
答案 1 :(得分:1)
在初始化之前,您正在使用picture
对象。
使用强>
picture.setIcon(pics[box.getSelectedIndex()]);
<强> INITIALIZATION 强>
picture = new JLabel(pics[0]);
将初始化语句移到监听器上方。
答案 2 :(得分:1)
我会在您声明后尽快初始化picture
。
所以不要使用private JLabel picture;
尝试使用:
private JLabel picture = new JLabel(pics[0]);