java - JPanel 的空指针异常

标签 java swing nullpointerexception jpanel

当我尝试在 actionPerformed 方法中调用 panel2 时,出现 nullpointerException。请帮助我摆脱这个愚蠢的问题。

public class PanelEventTest implements ActionListener {
    /**
     * @param args
     */
     JFrame frame;
     JPanel panel1, panel2;
     String[] list = {"Sachin","Tarun","Vipin"};
     JList jlist;
     JButton next;

     void originalFrame()
     {
         frame = new JFrame();
         frame.setSize(500, 300);
         frame.setVisible(true);
         frame.setLayout(new FlowLayout());
         frame.add(panel1());
         frame.add(panel2());
     }

     JPanel panel1()
     {
         panel1 = new JPanel();
         next = new JButton("Next");
         next.addActionListener(new PanelEventTest());
         panel1.add(next);
         return panel1;
     }

    JPanel panel2()
    {
         panel2 = new JPanel();
         jlist = new JList(list);
         panel2.add(jlist);
         panel2.add(new JLabel("Test"));
         return panel2;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new PanelEventTest().originalFrame();
    }


    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getActionCommand() == "Next")
        {
            panel2.removeAll();
        }
    }
 }

操作事件未附加到 panel2,这是此异常背后的原因吗?

最佳答案

而不是

next.addActionListener(new PanelEventTest());

你应该有

next.addActionListener(this);

否则,事件监听器将是 PanelEventTest 的另一个实例,其 originalFrame() 方法从未被调用,并且其 panel2 变量因此为空。 (请注意,即使调用其 originalFrame() 方法,它也会从其自己的 panel2 中删除所有内容,而不是从包含该按钮的框架的 panel2 中删除所有内容。

您应该更喜欢为监听器使用(匿名)内部类,而不是使框架本身成为监听器:

next.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        panel2.removeAll();
    }
});

关于java - JPanel 的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15979304/

相关文章:

java - HSSFArea.java : The method getCells() is undefined for the type AreaReference

java - 非静态变量 this 不能从静态内容 Java 中引用

java - 空变量不会使方法引用无效

java - 从另一个类更新 swing 组件

java - 使用 Jax-Rs 上的注释 Post 发送和不发送文件

java - 无法在单独的类中添加到根?

java - 基于堆栈的DFS有向图循环检测

java - 在背景图像上添加 JPanel/Containers/Images/JButton/等等?

java - 如果语句和 Swing 没有按预期工作,如何让 EDT 进入休眠状态?

java - NullPointerException - Drawable.setBounds - 可能是由于 fragment 转换