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");

configLengthconfig の行数に等しい変数です。私はそれをテストしましたが、動作します。そこに変なところがあるかもしれません。「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 行目が「true」でない場合でも、エラーは発生しません。

まあ、少し浮気した後、私はそれを機能させました...結局のところ、関数には、渡そうとしていた変数に設定するのではなく、ハードコードされたファイル名があったため、変数が台無しになりました。でも、助けてくれてありがとう!

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 を呼び出します。
その呼び出しを分離し、null でないことを確認します。

于 2012-12-07T03:15:26.810 に答える