2013-05-14 6 views
5

Mam dziwny problem z JSoup podczas uruchamiania mojej aplikacji JavaFX z przeglądarki (lub jako start w Internecie).JSoup losowo wyrzuca java.io.IOException: strumień jest zamykany podczas uruchamiania z przeglądarki

Po uruchomieniu z wnętrza IDE (Eclipse lub Netbeans) lub jako samodzielna aplikacja działa normalnie. Kiedy próbuję uruchomić jako start w sieci lub z przeglądarki (Chrome), JSoup losowo wyrzuca "java.io.IOException: strumień jest zamknięty".

Witryna, którą próbuję przeanalizować, to thepiratebay.sx. Kiedy po raz pierwszy uruchomię aplikację (z przeglądarki), pojawia się ten błąd. Przy uruchomionej aplikacji, jeśli spróbuję ponownie przeanalizować, to działa ... czasami. Kod

JSoup:

try { 
    //TODO: Change to HttpFetcher. This method is reporting "stream is closed" when running on browser 
    Connection con = Jsoup.connect(url) 
      .timeout(HTTP_TIMEOUT) 
      .userAgent(UserAgentGenerator.getUserAgent()) 
      .followRedirects(false); 
    doc = con.get(); 
    System.out.println("Fetching... " + url); 
} catch (IOException e) { 
    e.printStackTrace(); 
    System.out.println("Parser connect must have timed out, no results. " + url); 
    fetchFailed[i] = true; 
    continue; 
}  
finally { 
    i++; 
    if (CommonTFUtils.isAllTrue(fetchFailed)) { 
     throw new HttpException("Fetcher failed on every URL of " + response.getSite_name()); 
    } 
} 

i wyjątek rzucony:

CacheEntry[http://thepiratebay.sx/browse/207/0/7]: updateAvailable=true,lastModified=Tue May 14 14:28:16 BRT 2013,length=-1 
java.io.IOException: stream is closed 
    at sun.net.www.http.ChunkedInputStream.ensureOpen(Unknown Source) 
    at sun.net.www.http.ChunkedInputStream.read(Unknown Source) 
    at java.io.FilterInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.close(Unknown Source) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:468) 
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:410) 
    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:164) 
    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:153) 
    at com.package.torrent.parser.GenericParser.search(GenericParser.java:147) 
    at com.package.torrent.parser.GenericParser.browse(GenericParser.java:82) 
    at com.package.search.TrackerSearch.searchTracker(TrackerSearch.java:69) 
    at com.package.search.TrackerSearch.searchAllTrackers(TrackerSearch.java:40) 
    at com.package.search.TrackerSearch.searchAllTrackers(TrackerSearch.java:23) 
    at com.package.search.MovieBrowser.browseTrackers(MovieBrowser.java:49) 
    at com.package.ui.browse.BrowseController$MovieBrowserTask.call(BrowseController.java:237) 
    at com.package.ui.browse.BrowseController$MovieBrowserTask.call(BrowseController.java:213) 
    at javafx.concurrent.Task$TaskCallable.call(Task.java:1259) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Czy ktoś ma pomysł co może być przyczyną tego?

Z góry dziękuję.

+1

Jest to znany problem z JSoup. https://github.com/jhy/jsoup/issues/336 – Skylion

Odpowiedz

2

Myślę, że znalazłem rozwiązanie. Umieść ten kod, zanim kiedykolwiek zadzwonisz do JSoup. Wygląda na to, że aplety i uruchomienie sieci ustawiają tę wartość na true. Teraz zastanawiam się, dlaczego Słońce zmusza cię do uzyskania niestałości statycznej.

new URL("jar:file://dummy.jar!/").openConnection().setDefaultUseCaches(false); 

JSoup nie radzi sobie dobrze, gdy URL jest buforowany i traktuje go jako wyjątek.

Powiązane problemy