嘗試創建一個對象並將其添加到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