NullPointerException,杀了我的程序

时间:2013-04-14 12:00:35

标签: java swing nullpointerexception jcombobox

我正在尝试创建一个显示从组合框中选择颜色的小方框。但是当我尝试运行程序时,我不断收到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)

3 个答案:

答案 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]);