这是我的程序界面的图片,仅为了说明问题时的简单起见。
因此程序从此屏幕开始,第一步是通过单击“编辑名称”按钮来编辑您的名称,该按钮将调用此方法:
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行执行的动作是Submit按钮:
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中设置文本时。
完整代码:http://pastebin.com/rBWju8vX
最佳答案
您有2个构造函数,一个构造函数调用initComponents()
,另一个没有:
public Kraz() {
initComponents();
setVisible(true);
game();
}
public Kraz(String check) {
if (check.equals("editName"))
{
editName();
setVisible(true);
}
}
在main方法中,调用
new Kraz();
,这是调用initComponents()
的方法。但是,当您处理EditName事件时,您会再次调用构造函数,而另一个调用new Kraz("editName")
,而不会调用initComponents()
,因此EventField为null:else if (e.getSource() == EditName)
{
new Kraz("editName");
}
因此,在
Kraz
的此新实例中,当您单击“提交”按钮时,新实例将处理事件并调用game()
,除非没有初始化任何字段。