1

这是我的程序界面的图片,只是为了在解释我的问题时简单。 我的程序界面

所以程序从这个屏幕开始,第一步是编辑你的名字,通过点击编辑名字按钮,它调用这个方法:

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 中设置文本时。

完整代码: http: //pastebin.com/rBWju8vX

4

2 回答 2

7

您有 2 个构造函数,一个调用initComponents(),另一个没有:

public Kraz() {
    initComponents();
    setVisible(true);
    game();
}

public Kraz(String check) {
    if (check.equals("editName"))
    {
        editName();
        setVisible(true);
    }
}

在 main 方法中,您调用new Kraz();which 是调用initComponents(). 但是当您处理 EditName 事件时,您会再次调用构造函数,但另一个new Kraz("editName")不会调用initComponents(),因此 EventField 为空:

else if (e.getSource() == EditName)
{
    new Kraz("editName");
}

因此,当您在 的这个新实例中Kraz点击“提交”按钮时,新实例将处理事件并调用game(),但没有任何字段被初始化。

于 2012-07-19T01:22:34.267 回答
0

调用this()第二个构造函数:

public Kraz() {
    initComponents();
    setVisible(true);
    game();
}

public Kraz(String check) {

    this(); // <-- Add here

    if (check.equals("editName"))
    {
        editName();
        setVisible(true);
    }
}
于 2012-07-19T02:57:34.790 回答