Java中的空指针异常并不确定原因

时间:2012-12-07 03:11:25

标签: java nullpointerexception

我一直在编写一个Java程序 - 特别是一个Bukkit插件,虽然这与该问题无关 - 并且由于某种原因我无法看到我得到一个NullPointerException。下面摘录的是出现错误的代码。 getPath()已经过充分测试并生成了正确的目录 - 也就是配置文件所在的目录。配置文件已创建,应该已写入。我已经成功创建了测试人员文件,配置文件也是如此。

File config = new File(getPath("config"));
BufferedReader in = new BufferedReader(new FileReader(config));
skipLines(11, in);
if(in.readLine().equalsIgnoreCase("true")) {   //Exception is here
    System.out.println("Successfully wrote to config file");
}
else {
    System.out.println("Failed to write text correctly to config file");
}
in.close();

整个事情都包含在try / catch语句中。
如果您需要更多信息,请询问,我很乐意提供。
注意:文件工作正常 - 当我手动检查文件已写入时。这就是问题存在的原因。
写入该文件的代码如下:

File exConfig = new File(System.getProperty("user.dir") + File.separator + "configExample");
PrintWriter out = new PrintWriter(new FileWriter(config));
BufferedReader in = new BufferedReader(new FileReader(exConfig));
for(int i = 1; i <= configLength; i++) {
    out.println(in.readLine());
}
out.flush();
out.close();
System.out.println("Successfully wrote defaults to config");

configLength是一个等于配置中行数的变量。我测试了它,它的工作原理。 那里可能有些奇怪的东西。该文件名为&#34; configExample&#34;如下:

########################################
#  hPlugin is written by newbiedoodle  #
########################################
#   -----  Plugin config file  -----   #
########################################
hPlugin
v.0.3
NOTE: Do not edit the config file besides changing the values - it may result in errors.
--------------
Enable hPlugin?
true
Strikes before being banned?
3
Godmode?
true
First time running the plugin?
true
Curse protection?
true
Emergency shelter?
true
Path building?
true
Blocked words/phrases (Separate with colon (:)):
shit:fuck:damn:bitch:hell

正如你所看到的,这应该超过11行...如果第11行不是&#34;真实&#34;那么它仍然不应该导致错误。

好吧,经过一段时间的愚弄,我得到它的工作...原来,我有一个变量搞砸了,因为一个函数有一个硬编码的文件名,而不是设置为我试图通过的变量。感谢所有的帮助!

2 个答案:

答案 0 :(得分:2)

显而易见的例外是, BufferedReader 无法读取任何内容。因此in.readLine()返回null,因此调用in.readLine.equalIgnorecase()会返回NullPointerException。

在继续之前,您应首先检查BufferedReader.readLine()是否返回null。

if(in.readLine().equalsIgnoreCase("true")) {   //Exception is here

应该是

String line=null;
while((line=in.readLine())!=null) {   //if in.readLine()  returns null, the condition fails
if(line.equalsIgnoreCase("true")) {
     //do your stuff
}
}

答案 1 :(得分:0)

readLine()返回null,然后在该空值上调用equalsIgnore 将这些调用分开,并检查是否为空。