尝试创建一个对象并将其添加到ArrayList。代码类似于此:创建对象时Java线不可用?
class B{
public ArrayList<Answer> answerList = new ArrayList<Answer>();
questionList.add(new EssayQuestion());
answerList.add(new StringAnswer());
}
Exception in thread "main" java.lang.NullPointerException
at main.Test.createNewQuestion(Test.java:31)
at main.Survey.<init>(Survey.java:21)
at main.Test.<init>(Test.java:9)
at main.MainDriver.main(MainDriver.java:35)
并在调试,对在飞机坠毁前我得到这个: Thread.dispatchUncaughtException(Throwable) line: not available
它的崩溃在 answerList.add(new StringAnswer());
,我不知道为什么。
如果相关,questionList将在此代码块所在的超类中初始化。我正在访问它,因为它受到保护。 answerList是在本地创建的。
StringAnswer的构造函数向用户询问一个String并通过Scanner读取它。 EssayQuestion()的构造函数非常相似。
任何想法?
编辑:这是一些更多的代码按要求。是的,在初始化之后和添加任何内容之前,answerList显示为空。这是问题吗?为什么会发生? questionList再一次在父类中声明并初始化,因此可以不重新声明或初始化它吗?
public class Test extends Survey
{
public ArrayList<Answer> answerList;
public Test()
{
answerList = new ArrayList<Answer>();
System.out.print("How many questions? ");
int numQuestions = kb.nextInt();
for (int i = 0; i < numQuestions; i++)
{
displayMenu();
createNewQuestion();
}
}
public void createNewQuestion()
{
int input = -1;
do{
System.out.print("Question Type: ");
input = kb.nextInt();
System.out.println();
switch (input)
{
case 1: questionList.add(new EssayQuestion());
answerList.add(new StringAnswer());
break;
这里是StringAnswer:
public class StringAnswer extends Answer
{
String text;
public StringAnswer()
{
setAnswer();
}
public StringAnswer(String text)
{
this.text = text;
}
@Override
public void display()
{
System.out.println(text);
}
public String getAnswer()
{
return text;
}
@Override
public void setAnswer()
{
System.out.print("Enter Answer: ");
setAnswer(kb.nextLine());
System.out.println("");
}
public void setAnswer(String text)
{
this.text = text;
}
}
如果在'answerList.add(new StringAnswer());'崩溃,那么'answerList'显然是'null'。您是否尝试过使用调试器逐步执行代码? –
如果你的代码不是太大,你可以发布它,而不是你发布的“类似代码”。 – Jayy
是的,在任何东西被添加到它之前,anserList都是空的。我会根据要求发布更大的代码块。 – iaacp