填充泛型列表时发生java.lang.NullPointerException
所以,我在学校用Bluej编程,我们的目标是使用一个通用列表以图形方式设计一个 Pokedex。我在设计界面方面没有问题,但是在填写列表时,我遇到了一个问题 --清单(自制的,所以我提供了完整的清单,但重点放在老师告诉我们需要的东西上)-- 主课填充泛型列表时发生java.lang.NullPointerException,java,list,nullpointerexception,Java,List,Nullpointerexception,所以,我在学校用Bluej编程,我们的目标是使用一个通用列表以图形方式设计一个 Pokedex。我在设计界面方面没有问题,但是在填写列表时,我遇到了一个问题 --清单(自制的,所以我提供了完整的清单,但重点放在老师告诉我们需要的东西上)-- 主课 import basis.*; public class Anwendung { private Fenster Window; private Farbe Color; private Maus mouse; pr
import basis.*;
public class Anwendung
{
private Fenster Window;
private Farbe Color;
private Maus mouse;
private List<Pokemon> Pokedex;
private TextFeld TFStatus;
private TextFeld TFName;
private TextFeld TFTyp;
private ZahlenFeld ZFNummer;
private Knopf Knext;
private Knopf KtoFirst;
private Knopf ktoLast;
public Anwendung(){
WindowDesign();
gottacatchthemall();
IhaveNoIdea();
}
public void IhaveNoIdea(){
Pokedex.toFirst();
Pokedex.getCurrent().getInhalt();
}
public void WindowDesign(){
Window= new Fenster(700,700);
//Window.setzeHintergrundFarbe(Color.GRUEN);
Window.setzeTitel("Pokedex");
Pokedex = new List<Pokemon>();
mouse = new Maus();
TFZFGeneration();
KnopfGeneration();
}
public void KnopfGeneration(){
Knext = new Knopf();
Knext.setzePosition(550, 300);
Knext.setzeText("next");
KtoFirst = new Knopf();
KtoFirst.setzePosition(550, 350);
KtoFirst.setzeText("toFirst");
ktoLast = new Knopf();
ktoLast.setzePosition(550, 400);
ktoLast.setzeText("toLast");
}
public void TFZFGeneration(){
TFStatus = new TextFeld();
TFStatus.setzeGroesse(120,20);
TFStatus.setzePosition(0,0);
TFStatus.setzeEditierbar(false);
TFStatus.setzeText("Methode");
TFName = new TextFeld();
TFName.setzeGroesse(120,20);
TFName.setzePosition(400,300);
TFName.setzeEditierbar(false);
TFName.setzeText("PokeName");
TFTyp = new TextFeld();
TFTyp.setzeGroesse(120,20);
TFTyp.setzePosition(400,350);
TFTyp.setzeEditierbar(false);
TFTyp.setzeText("PokeTyp");
}
public void gottacatchthemall(){
TFStatus.setzeText("gottacatchthemall");
Pokemon P;
P = new Pokemon(1,"Bisasam","Pflanze");
Pokedex.append(P);
P = new Pokemon(2,"Bisaknosp","Pflanze");
Pokedex.append(P);
P = new Pokemon(3,"Bisaflor","Pflanze");
Pokedex.append(P);
P = new Pokemon(4,"Glumanda","Pflanze");
Pokedex.append(P);
P = new Pokemon(5,"Glutexo","Feuer");
Pokedex.append(P);
P = new Pokemon(6,"Glurak","Feuer");
Pokedex.append(P);
P = new Pokemon(7,"Schiggy","Wasser");
Pokedex.append(P);
P = new Pokemon(8,"Schillok","Wasser");
Pokedex.append(P);
P = new Pokemon(9,"Turtok","Wasser");
Pokedex.append(P);
}
}
尾部似乎没有定义,即使它在下面几行被定义,并且这一行没有激活,因为有一个if条件阻止else条件在列表为空时关闭。列表一开始是空的,我检查过了。
当我删除这段代码时,列表似乎根本没有填充,因为方法goFirst根本不起作用
有什么建议吗?
我有点卡住了,我的老师也不能给我解释,所以如果我有点不具体,我很抱歉。你说“尾巴似乎没有定义,尽管它被定义了几行”——这是什么意思?在Java中,必须首先赋值——“上面的几行”
在上面的代码中,您似乎试图在初始化tail
之前调用tail.setNachfolger(N)
,因此tail为null,因此为NullPointerException
另外,请务必使用括号(在“else”附近),因为现在不清楚您的意图是什么
很难理解您的代码,但我认为应该是:
else {
tail = N;
tail.setNachfolger(N);
}
当调用列表的构造函数时,设置
tail=null
。在尝试调用变量tail
的方法之前,似乎从未将节点
分配给该变量。我怀疑,当您将第一个节点添加到列表中时,您需要将其分配给head
和tail
变量,因为列表的head和tail将是同一个节点。
import basis.*;
public class Pokemon{
private int Index;
private String Name;
private String Typ;
public Pokemon(int pIndex,String pName, String pTyp){
Index = pIndex;
Name = pName;
Typ = pTyp;
}
public int Index(int X){
return X;
}
}
import basis.*;
public class Anwendung
{
private Fenster Window;
private Farbe Color;
private Maus mouse;
private List<Pokemon> Pokedex;
private TextFeld TFStatus;
private TextFeld TFName;
private TextFeld TFTyp;
private ZahlenFeld ZFNummer;
private Knopf Knext;
private Knopf KtoFirst;
private Knopf ktoLast;
public Anwendung(){
WindowDesign();
gottacatchthemall();
IhaveNoIdea();
}
public void IhaveNoIdea(){
Pokedex.toFirst();
Pokedex.getCurrent().getInhalt();
}
public void WindowDesign(){
Window= new Fenster(700,700);
//Window.setzeHintergrundFarbe(Color.GRUEN);
Window.setzeTitel("Pokedex");
Pokedex = new List<Pokemon>();
mouse = new Maus();
TFZFGeneration();
KnopfGeneration();
}
public void KnopfGeneration(){
Knext = new Knopf();
Knext.setzePosition(550, 300);
Knext.setzeText("next");
KtoFirst = new Knopf();
KtoFirst.setzePosition(550, 350);
KtoFirst.setzeText("toFirst");
ktoLast = new Knopf();
ktoLast.setzePosition(550, 400);
ktoLast.setzeText("toLast");
}
public void TFZFGeneration(){
TFStatus = new TextFeld();
TFStatus.setzeGroesse(120,20);
TFStatus.setzePosition(0,0);
TFStatus.setzeEditierbar(false);
TFStatus.setzeText("Methode");
TFName = new TextFeld();
TFName.setzeGroesse(120,20);
TFName.setzePosition(400,300);
TFName.setzeEditierbar(false);
TFName.setzeText("PokeName");
TFTyp = new TextFeld();
TFTyp.setzeGroesse(120,20);
TFTyp.setzePosition(400,350);
TFTyp.setzeEditierbar(false);
TFTyp.setzeText("PokeTyp");
}
public void gottacatchthemall(){
TFStatus.setzeText("gottacatchthemall");
Pokemon P;
P = new Pokemon(1,"Bisasam","Pflanze");
Pokedex.append(P);
P = new Pokemon(2,"Bisaknosp","Pflanze");
Pokedex.append(P);
P = new Pokemon(3,"Bisaflor","Pflanze");
Pokedex.append(P);
P = new Pokemon(4,"Glumanda","Pflanze");
Pokedex.append(P);
P = new Pokemon(5,"Glutexo","Feuer");
Pokedex.append(P);
P = new Pokemon(6,"Glurak","Feuer");
Pokedex.append(P);
P = new Pokemon(7,"Schiggy","Wasser");
Pokedex.append(P);
P = new Pokemon(8,"Schillok","Wasser");
Pokedex.append(P);
P = new Pokemon(9,"Turtok","Wasser");
Pokedex.append(P);
}
}
java.lang.NullPointerException
at List.append(List.java:100)
at Anwendung.gottacatchthemall(Anwendung.java:88)
at Anwendung.<init>(Anwendung.java:25)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at bluej.runtime.ExecServer$3.lambda$run$1(ExecServer.java:834)
at bluej.runtime.ExecServer.runOnTargetThread(ExecServer.java:930)
at bluej.runtime.ExecServer$3.run(ExecServer.java:832)
}
else
tail.setNachfolger(N);
if(isEmpty){
head =N;
}
else
tail.setNachfolger(N); // Use brackets
tail = N;
else {
tail = N;
tail.setNachfolger(N);
}