2011-01-14 28 views
5

Ho il seguente problema:java.lang.NullPointerException: Inflater è stato chiuso l'InputStreamReader

Quando carico la risorsa dal progetto tutto funziona benissimo, ma quando ho messo su un .jar e provo a caricare Ottengo un'eccezione

Il codice è:

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(); 
} 

E StackTrace è:

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) 

Il problema si verifica su stream.getRawRecord(). Ho anche provato con BufferedReader con lo stesso risultato su readLine();

Qualche idea?

+0

Non stai chiudendo il Reader. – EJP

risposta

1

Questo può essere un bug in Java. Ho avuto un problema simile, descritto qui: https://issues.apache.org/jira/browse/FELIX-1032

L'applicazione è in esecuzione con alcune impostazioni speciali del caricatore di classe?

+0

No, sto usando le impostazioni predefinite, ma il problema sembra lo stesso che avevi. – Yhonny

+0

Non riesco a risolvere il problema con la soluzione suggerita, richiamo esplicitamente il metodo close() ma il problema si verifica mentre leggo il file. – Yhonny

-1

caricamento di risorse dal progetto significa che non si ha a che fare con zip (jar è zip), quindi InputStreamReader si risolve nel file che si desidera leggere.

La mia ipotesi è che InputStreamReader risolva il file nullo o sbagliato quando si ha a che fare con jar. Log vars per essere sicuro

+0

Il file è all'interno di jar e talvolta funziona bene, voglio dire, la prima volta che provo a leggerlo fallisce ma la seconda volta funziona ok (alcune volte anche la seconda volta non riesce). Ma il debug ho visto che InputStreamReader apriva la risorsa ok tutte le volte (non nulla). – Yhonny

+0

Se InputStreamReader era nullo, non comparirebbe nello stack trace. – EJP

Problemi correlati