2011-10-29 27 views
0

以下はjava.lang.NullPointerExceptionをスローするスニペットです。NullPointerException(文字列が初期化されている場合)

else if(jRadioButton2.isSelected()) { 
      // chrome selected 
      String chrome_count_S="0"; 
      int chrome_count_I=0; 
      FileWriter writer = new FileWriter("D:\\UnderTest\\MyFirstPoll\\build\\classes\\poll_count\\Chrome.txt"); 
      FileReader reader = new FileReader("D:\\UnderTest\\MyFirstPoll\\build\\classes\\poll_count\\Chrome.txt"); 
      BufferedReader br = new BufferedReader(reader); 
      while((chrome_count_S = br.readLine()) != null) { 
        chrome_count_I = Integer.parseInt(chrome_count_S); 
        chrome_count_I++; 
        chrome_count_S = Integer.toString(chrome_count_I); 
      } 
      writer.write(chrome_count_S); 
      writer.close(); 

このスニペットが発生すると、NullPointerExceptionがスローされます。私がwriter.write(chrome_count_S);の引数をwriter.write("chrome_count_S"); I.Eに置き換えた場合a String、例外はありません。それ以外の場合は、文字列chrome_count_Sを初期化したときに例外が発生するのはなぜですか?

答えて

6

readline()nullのときにループが停止し、現在の値が変数chrome_count_Sに書き込まれます。

while((chrome_count_S = br.readLine()) != null) 

のでchrome_count_Sはループの後とwriteコマンドでnullことです。

=== === UPDATE

ループでchrome_count_S行を削除し、書き込み中にchrome_count_Iから値を取る:

while((chrome_count_S = br.readLine()) != null) { 
    chrome_count_I = Integer.parseInt(chrome_count_S); 
    chrome_count_I++; 
} 
writer.write(Integer.toString(chrome_count_I)); 
0

初期化しても、ある時点でbr.readLine()がnullをchroe_count_Sに割り当てます。

2

あなたwhileループがchrome_count_Sまで存在しません。 nullです。もちろんwriter.write()への呼び出しはNullPointerExceptionを投げます。おそらく

1

writer.write前に、あなたはbr.readline()chrome_count_S

NULLを入れたときにのみ終了whileループ

while((chrome_count_S = br.readLine()) != null)

を持っているので、

関連する問題