2011-01-14 13 views
5

で閉鎖されていますのjava.lang.NullPointerException:のInflaterは、私は次のような問題を持っているInputStreamReaderの

私はプロジェクトからリソースをロードすると、すべてが正常に動作しますが、私はの.jarの上に置いたときにロードしよう私は例外を得る。

コードは次のとおりです。

InputStreamReader reader = 
    new InputStreamReader(
     this.getClass().getResource(fileName).openStream()) 
CsvReader stream = new CsvReader(reader); 
try { 
    while (stream.readRecord()) { 
     line = stream.getRawRecord(); 
     //DO SOMETHING... 
    } 
}catch (Exception e) { 
    System.err.println(e.getMessage()); 
    e.printStackTrace(); 
} finally { 
    stream.close(); 
} 

そして、スタックトレースは次のとおりです。

Inflater has been closed java.lang.NullPointerException: Inflater has been closed 
at java.util.zip.Inflater.ensureOpen(Inflater.java:364) 
at java.util.zip.Inflater.inflate(Inflater.java:237) 
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:135) 
at java.io.FilterInputStream.read(FilterInputStream.java:116) 
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) 
at java.io.InputStreamReader.read(InputStreamReader.java:167) 
at utils.csvreader.CsvReader.checkDataLength(CsvReader.java:1198) 
at utils.csvreader.CsvReader.readRecord(CsvReader.java:604) 

問題がstream.getRawRecord()に起こります。私も同じ結果でBufferedReaderで試したreadLine();

アイデア?

+0

あなたはリーダーを閉じていません。 – EJP

答えて

1

これはJavaのバグである可能性があります。私は同様の問題を抱えていました:https://issues.apache.org/jira/browse/FELIX-1032

あなたのアプリケーションはいくつかのクラスローダー設定で動作していますか?

+0

いいえ、私はデフォルト設定を使用していますが、問題はあなたと同じように見えます。 – Yhonny

+0

私は提案された回避策で問題を解決できません。私は明示的にclose()メソッドを呼び出しますが、ファイルを読み込んでいる間に問題が発生します。 – Yhonny

-1

プロジェクトからリソースをロードするということは、zip(jarはzip)を処理しないことを意味します。したがって、InputStreamReaderは読み込みたいファイルに解決されます。

私は、InputStreamReaderがjarを扱うときにnullまたは間違ったファイルに解決すると思います。ログをasureにしてください。

+0

ファイルはデ・ジャーの中にあり、うまく動作することがあります。つまり、初めて読み込もうとすると失敗しますが、2度目は正常に動作します(何度か失敗しても何度か失敗します)。しかし、デバッグ私は、InputStreamReaderは、リソースがすべての時間(nullではない)を開いて見た。 – Yhonny

+0

InputStreamReaderがnullの場合、スタックトレースには表示されません。 – EJP