Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有JPanel的Nullpointerexception_Java_Swing_Nullpointerexception_Jpanel - Fatal编程技术网

Java 带有JPanel的Nullpointerexception

Java 带有JPanel的Nullpointerexception,java,swing,nullpointerexception,jpanel,Java,Swing,Nullpointerexception,Jpanel,当我试图在actionPerformed方法内调用panel2时,我得到的是nullpointerexception。请帮我摆脱这个愚蠢的prblm public class PanelEventTest implements ActionListener { /** * @param args */ JFrame frame; JPanel panel1, panel2; String[] list = {"Sachin","Tarun

当我试图在actionPerformed方法内调用panel2时,我得到的是nullpointerexception。请帮我摆脱这个愚蠢的prblm

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
变量为null。(请注意,即使调用了它的
originalFrame()
方法,它也会从自己的panel2中删除所有内容,而不是从包含按钮的框架的panel2中删除)

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

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

next.addActionListener(new PanelEventTest());
你应该

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

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

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

next.addActionListener(此)

可能


next.addActionListener(此)

@Sachin-Lal,为了帮助您使用而不是删除和添加新的JPanelTY,我的问题解决了。我的下一个问题是,如果我创建了三个类,一个用于originalFrame,一个用于Panel1,另一个用于Panel2,那么如何实现/调用/传递事件?我已经粘贴了代码@plz check out guys.@Sachin Lal,为了使用而不是删除和添加新的JPanelTY来获得帮助,我的这个问题得到了解决。我的下一个问题是,如果我创建了三个类,一个用于originalFrame,一个用于Panel1,一个用于Panel2,那么如何实现/调用/传递事件?我已经粘贴了代码@plz check out guys.欢迎来到stackoverflow。请将您的问题更新为stacktracewelcome to stackoverflow错误。请用stacktrace错误更新您的问题