Java新手试图找出NullPointerException和
我正在用Java学习iTunes U Stanford CS106a课程,我很喜欢它,但我对这个名为冲浪者的程序感到非常愤怒
当我使用这个代码时
public NameSurferEntry(String line) {
int endOfName = line.indexOf(" ");
name = line.substring(0,endOfName);
String newLine = line.substring(endOfName+1);
StringTokenizer tokenizer = new StringTokenizer(newLine);
if (tokenizer.hasMoreTokens()) {
name = tokenizer.nextToken();
}
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
array[i] = Integer.parseInt(tokenizer.nextToken());
}
}
我在第二行(int endOfName等)上得到一个Suspended/NullPointerException,上面写着“NameSurferEntry.(String)line:16”
如果我尝试这样做:
public NameSurferEntry(String line) {
StringTokenizer tokenizer = new StringTokenizer(line);
name = tokenizer.nextToken();
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
array[i] = Integer.parseInt(tokenizer.nextToken());
}
}
我得到一个挂起的/NullPointerException,消息是“StringTokenizer.(String,String,boolean)line:182”,后跟“Source not found”
有人知道我做错了什么吗
更新
谢谢你的帮助
NameSurferEntry实际上由另一个类调用,该类为null
提供一个值。但是在阅读了您的建议之后,我将line
声明为ivar,但在NameSurferEntry的主体中对其进行了初始化,这就解决了它。(在我将line
声明并初始化为ivar之前,我不明白为什么我初始化它的地方会有不同,但它确实存在。)
下一个错误直到第48行才出现!所以你可能很快会再次收到我的来信。。。。在我去看是否能自己解决的路上。再次感谢
哎呀
别那么快
当我将line
初始化为NameSurferEntry主体中的实际字符串时,一切正常
问题是NameSurferEntry由另一个方法调用:
public NameSurferDataBase(String filename) {
try {
BufferedReader br = new BufferedReader(new FileReader(filename));
while (true) {
String blah = br.readLine();
if (blah == null) {
break;
}
NameSurferEntry entry = new NameSurferEntry(blah);
hmap.put(entry.getName(), entry);
}
br.close();
}
catch (IOException ex) {
throw new ErrorException(ex);
}
}
(这个方法又被另一个方法调用,该方法为filename
提供了一个实际的文件,所以我们在这里没有问题。)
但是如果我将参数blah
传递给NameSurferEntry
,然后NameSurferEntry
初始化它的参数,那么我就丢失了blah
,对吗?然后,我的冲动是将line
初始化为方法之外的ivar,但随后我再次得到NullPointerException
消息,我回到了开始的地方。啊
想法
# 1 楼答案
作为参数提供给构造函数的
line
变量是null
如果调用
NameSurferEntry
构造函数,请确保输入的不是null
# 2 楼答案
您的
line
参数为空。这就是为什么您在尝试对line
进行操作时会得到一个NullPointerException
(使用indexOf
和StringTokenizer
对line
进行操作时,如果line
为空,则会产生一个NullPointerException
,因为它没有任何操作对象)