import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Form1 {
private JPanel panel1;
private JButton button1;
public Form1() {
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked");
}
});
}
public static void main(String args[]){
JFrame frame = new JFrame("Form 1");
frame.setContentPane(new Form1().panel1);
frame.pack();
frame.setVisible(true);
}
}
该错误与main方法中的setContentPane
有关,然后与actionListener
有关。我在下面发布了确切的错误。为什么是这样?我是使用IntelliJ IDEA GUI表单创建器创建的。
Exception in thread "main" java.lang.NullPointerException
at Form1.<init>(Form1.java:12)
at Form1.main(Form1.java:22)
答案 0 :(得分:1)
在Java中,您不能使用未初始化的变量,否则将收到NPE。请参阅以下代码,请阅读Java书籍:)
public class Form1 {
private JPanel panel1;
private JButton button1;
public Form1() {
panel1 = new JPanel();
button1 = new JButton1("Press Me");
panel1.add(button1);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked");
}
});
}
public static void main(String args[]){
JFrame frame = new JFrame("Form 1");
frame.setContentPane(new Form1().panel1);
frame.pack();
frame.setVisible(true);
}
}
答案 1 :(得分:0)
因此,您将遇到两个导致该错误的问题。创建对象(在这种情况下为JButton
,JPanel
)之后,您必须实例化它们。有很多不同的方法来执行此操作,这取决于您要尝试执行的操作,但是针对您的问题的最简单的解决方法是在构造函数中添加以下行:
panel1 = new JPanel();
button1 = new JButton();
之后,您的代码应该可以正常运行。