gpt4 book ai didi

java - JPanel 的空指针异常

转载 作者:行者123 更新时间:2023-12-01 18:50:47 24 4
gpt4 key购买 nike

当我尝试在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com