0

ユーザーが入力した文字列が回答の ArrayList 内の対応する要素と等しいことを確認したいアプレットの TextField に入力しましたが、コンパイル時に大きなエラーが発生しました。

Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.game.main.AppletMain.actionPerformed(AppletMain.java:72) // etc

これがメインクラスのコードです(重要でない部分を編集しました:

private TextField commandInput;
private TextArea messageDisplay;
private Message messages;
private Answer answers;
private int currentLevel;

@Override
public void actionPerformed(ActionEvent e) {
    String userInput = commandInput.getText();
    if (userInput == answers.getIntroAnswers().get(0)) {
        messageDisplay.append("\n \n" + userInput + "\n \n");
        commandInput.selectAll();
    }
    getCurrentLevel();
}

ArrayList を保持する Answers クラスは次のとおりです。

package com.game.main;

import java.util.ArrayList;

public class Answer {

private ArrayList<String> introAnswers;
private String introAns1 = "go", introAns2 = "Go";

public Answer() {
    introAnswers = new ArrayList<String>();
    introAnswers.add(introAns1);
    introAnswers.add(introAns2);
}

public ArrayList<String> getIntroAnswers() {
    return introAnswers;
}

}
4

4 に答える 4

1

型のオブジェクトへの参照を作成しましたAnswerが、新しいオブジェクトを割り当てていません

private Answer answers;

コンストラクターでこの割り当てを一度だけ行うか、ボタンをクリックするたびに新しいオブジェクトを作成する必要があります。
あなたのクラス名はCons次のとおりです。

public Cons(){
 answer = new Answer();
//...
}
于 2013-06-08T22:12:06.403 に答える
0

他の人が言ったことは別として、コードが「answers.getIntroAnswers().get(0)」に遭遇する前に、これはほとんどの人が本当かもしれない例外をスローすると言いますが、「String userInput =commandInput.getText();」とも思います。 " 提供されたコードにそのテキストフィールドの初期化がない場合、例外をスローする可能性が高くなります...

于 2013-06-09T02:22:17.197 に答える
0

文字列はオブジェクトであるため、 == は参照のみを比較し、その内容は比較しません。試す :answers.getIntroAnswers().get(0).equals(userInput)

于 2013-06-08T22:14:47.533 に答える
0

GUI をどのように構築していますか? あなたが得ているエラーは、メソッドを呼び出す前に Answers オブジェクトをインスタンス化していないと推測します。これを修正するには、Answer オブジェクトのインスタンスを保持するように Answers-変数を初期化したことを確認してください。

また、文字列の比較について考慮すべきことがあります。

== は参照の等価性を比較するための演算子で、両方の変数が同じオブジェクトを指しているかどうかをテストします。文字列を比較するときは、常に equals() メソッドを使用してください。このような:

String a = "asd";
String b = "asdasd";
String c = "asd";
a.equals(b); // would equal false
c.equals(a); // true
于 2013-06-08T22:11:34.300 に答える