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 つのコンストラクターがあり、1 つは呼び出し、initComponents()もう 1 つは呼び出しません。

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

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

main メソッドでnew Kraz();は、 which を呼び出すメソッドを呼び出しますinitComponents()。ただし、EditName イベントを処理するときは、コンストラクターを再度呼び出しますが、もう 1 つのコンストラクターを呼び出します。このコンストラクターnew Kraz("editName")は呼び出されないinitComponents()ため、EventField は null です。

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

したがって、この新しい のインスタンスでKraz[送信] ボタンをクリックすると、新しいインスタンスがイベントを処理し、 を呼び出しますgame()。ただし、どのフィールドも初期化されていません。

于 2012-07-19T01:22:34.267 に答える
0

this()2 番目のコンストラクターを呼び出します。

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 に答える