我正在尝试清除窗格,然后将新窗格放置在有摆动的位置。但是用我当前的设置,它抛出了一个我不理解的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.NullPointerExceptionpane1.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

10-08 01:39