如何在Java中使用同级内部类的方法

时间:2018-11-15 15:32:39

标签: java swing lambda jbutton actionlistener

我有一个代表GUI(MyClass)的类。在该类中,我有两个内部类,每个JPanel都一个(PanelAPanelB)。现在,我想在PanelA中有一个按钮来调用myMethod()中的es方法(PanelB)。

public class MyClass extends JFrame {

    private static final long serialVersionUID = 1L;
    private PanelA panelA;

    public MyClass() {
        PanelA panelA = new PanelA();
        getContentPane().add(panelA);
        JPanel panelB = new PanelB();
        getContentPane().add(panelB);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(panelA, BorderLayout.CENTER);
        getContentPane().add(panelB, BorderLayout.PAGE_START);
    }


    public static void main(String args[]) {
        MyClass frame = new MyClass();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    class PanelA extends JPanel {

        PanelA() {
            // some stuff
        }

        public void myMethod() {
            System.out.println("successfully called addSphere().");
        }

    }

    class PanelB extends JPanel {

        PanelB() {
            JButton myButton = new JButton("Do something in PanelA");
            myButton.addActionListener(e -> {
                panelA.myMethod();
            });

            this.add(myButton);
            this.setLayout(new BorderLayout());
            this.add(myButton, BorderLayout.WEST);
        }
    }
}

我认为该代码段应该可以正常工作,但是一旦我单击该按钮,就会抛出一个NullPointerException

java.lang.NullPointerException
    at MyClass$PanelB.lambda$new$0(MyClass.java:50)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

0 个答案:

没有答案