我有一个代表GUI(MyClass
)的类。在该类中,我有两个内部类,每个JPanel都一个(PanelA
和PanelB
)。现在,我想在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)