1

我一直在编写一个 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是一个变量,等于配置中的行数。我已经对其进行了测试,并且可以正常工作。那里可能有一些奇怪的东西。名为“configExample”的文件如下:

########################################
#  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 行不是“真”,那么它仍然不应该导致错误。

好吧,经过一番鬼混之后,我让它工作了......结果,我搞砸了一个变量,因为一个函数有一个硬编码的文件名,而不是设置为我试图传递的变量。感谢所有的帮助!

4

2 回答 2

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
}
}
于 2012-12-07T03:14:52.927 回答
0

readLine() 返回 null,然后对该 null 值调用 equalsIgnore。
分开那个调用,并检查不为空。

于 2012-12-07T03:15:26.810 回答