0

我让用户在 Applet 中输入 TextField,我想检查他们输入的字符串是否等于答案 ArrayList 中的相应元素,但是我得到一个很大的编译时错误:

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

你是如何构建你的 GUI 的?你得到的错误会让我猜测你在尝试调用它们的方法之前没有实例化 Answers 对象。要解决此问题,请确保您已初始化 answers 变量以保存 Answer 对象的实例。

此外,在比较字符串时需要考虑一些事情。

== 是比较引用相等的运算符,它测试两个变量是否指向同一个对象。比较字符串时,请始终使用 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 回答
0

String 是一个对象,因此 == 只比较引用,而不是它们的内容。尝试 :answers.getIntroAnswers().get(0).equals(userInput)

于 2013-06-08T22:14:47.533 回答