我让用户输入到Applet中的TextField,我想检查他们输入的String是否等于答案的ArrayList中的相应元素,但是我得到一个很大的编译时错误:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at com.game.main.AppletMain.actionPerformed(AppletMain.java:72) // etc
这是代码,Main类(我已经编辑出了不重要的部分:
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;
}
}
答案 0 :(得分:1)
您创建了对Answer
类型对象的引用,但您从未为其分配过新对象
private Answer answers;
您可以在构造函数中执行此分配,只需执行一次,或者每次单击按钮时都必须创建新对象。
我假设您的班级名称是Cons
:
public Cons(){
answer = new Answer();
//...
}
答案 1 :(得分:0)
您是如何构建GUI的?你得到的错误会让我猜测你在尝试调用它们之前没有实例化Answers对象。要解决此问题,请确保已初始化answers-variable以保存Answer对象的实例。
此外,还需要考虑比较字符串。
==是比较引用相等性的运算符,它测试两个变量是否指向同一个对象。比较字符串时,始终使用equals() - 方法。像这样:
String a = "asd";
String b = "asdasd";
String c = "asd";
a.equals(b); // would equal false
c.equals(a); // true
答案 2 :(得分:0)
String是一个对象,因此==只比较引用,而不是它们的内容。尝试
:answers.getIntroAnswers().get(0).equals(userInput)
答案 3 :(得分:0)
除了其他人所说的,在代码进入“answers.getIntroAnswers()。get(0)”之前,这是大多数人抛出可能为真的异常,我也认为“String userInput = commandInput.getText ();”因为在提供的代码中没有初始化该文本字段,所以很有可能抛出异常......