这是我的程序界面的图片,只是为了简单解释我的问题。
所以程序从这个屏幕开始,第一步是编辑你的名字,点击编辑名称按钮,调用这个方法:
private void editName() {
NameLabel = new javax.swing.JLabel();
NameField = new javax.swing.JTextField();
Sumbit = new javax.swing.JButton();
Sumbit.addActionListener(this);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setAlwaysOnTop(true);
setType(java.awt.Window.Type.POPUP);
NameLabel.setText("Name:");
NameField.setText(name);
Sumbit.setText("Sumbit");
..location code..
因此,您在弹出的文本字段中键入您的姓名,然后点击提交。然后我收到了这个错误:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at kraz.Kraz.game(Kraz.java:62)
at kraz.Kraz.actionPerformed(Kraz.java:186)
第186行的actionPerformed是提交按钮:
else if (e.getSource() == Sumbit)
{
name = NameField.getText();
NameField.setText("" + name);
if (step == 1)
{
++step;
game();
}
}
第62行是我调用game()方法的地方。第162行是下一个:
public void game() {
if (step == 1)
{
HealthBar.setValue(100);
}
else if (step == 2)
{
EventField.setText("Test");
ProgressBar.setValue(1);
}
}
,错误是我在EventField中设置文本时。
答案 0 :(得分:7)
你有2个构造函数,一个调用initComponents()
而另一个不调用:
public Kraz() {
initComponents();
setVisible(true);
game();
}
public Kraz(String check) {
if (check.equals("editName"))
{
editName();
setVisible(true);
}
}
在主要方法中,您调用new Kraz();
,即调用initComponents()
的{{1}}。但是当你处理EditName事件时,你再次调用构造函数,而另一个new Kraz("editName")
,它不调用initComponents()
,所以EventField为null:
else if (e.getSource() == EditName)
{
new Kraz("editName");
}
因此,在Kraz
的这个新实例中,当您点击“提交”按钮时,新实例将处理该事件并调用game()
,但没有任何字段已初始化。
答案 1 :(得分:0)
在第二个构造函数中调用this()
:
public Kraz() {
initComponents();
setVisible(true);
game();
}
public Kraz(String check) {
this(); // <-- Add here
if (check.equals("editName"))
{
editName();
setVisible(true);
}
}