我正在尝试清除窗格,然后将新窗格放置在有摆动的位置。但是用我当前的设置,它抛出了一个我不理解的NullPointerException。这是我的代码:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel();
JPanel pane2 = new JPanel();
addComponentsToPane(frame.getContentPane(), pane1, pane2);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
我在addComponentsToPane中有一个按钮的动作侦听器:
buttonGenerate.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
Map<String,String> replacements = new HashMap<String,String>(10);
replacements.put("name", textName.getText());
//createTable();
//makeDocx(replacements);
removePane();
}
});
这是removePane()函数:
public static void removePane () {
pane1.removeAll();
}
在类的开头,panel1已声明为
public static JPanel pane1 = null;
。当我单击带有动作侦听器的按钮时,它将抛出指向Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
的pane1.removeAll();
。为什么会弹出此错误?我知道我缺少一些重要的东西,是否有人知道它是什么,或者知道实现我想要的替代方法?
谢谢
最佳答案
如果pane1是静态变量,则应在createAndShowGUI()方法中引用它。您错误地创建了一个新的本地引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel pane1 = new JPanel(); //INCORRECT
相反,请使用静态引用:
public static void createAndShowGUI() {
final JFrame frame = new JFrame("Generator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pane1 = new JPanel(); //CORRECT