2013-05-14 9 views
5

JavaFX uygulamamı tarayıcıdan çalıştırırken (veya web-başlangıç ​​olarak) bazı garip JSoup sorunları yaşıyorum.JSoup rastgele java.io.IOException'ı atar: tarayıcıdan çalıştırılırken akış kapatılır

IDE (Eclipse veya Netbeans) içinden veya bağımsız bir uygulama olarak çalıştırdığımda normal olarak çalışır. Bir web-start ya da tarayıcıdan (Chrome) çalışmayı denediğimde, JSoup rasgele bir "java.io.IOException: stream is kapalı" atar.

Ayrıştırmaya çalıştığım site thepiratebay.sx. Uygulamayı ilk çalıştırdığımda (tarayıcıdan), bu hatayı alıyorum. Uygulama çalışırken, tekrar ayrıştırmaya çalışırsam, bazen çalışır.

JSoup kodu:

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

Ve istisnası atılır:

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) 

herkes bu neden olabilir ne bir fikir var mı?

Şimdiden teşekkürler.

+1

Bu, JSoup ile bilinen bir sorundur. https://github.com/jhy/jsoup/issues/336 – Skylion

cevap

2

Sanırım bir çözüm buldum. JSoup'u aramadan önce bu kodu yerleştirin. Görünüşe göre, appletler ve web start bu değeri true olarak ayarladı. Şimdi, Sun'ın neden statik olmayan bir değişkene statik olarak erişebildiğini merak ediyorum.

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

URL'ler önbelleğe alındığında ve bir istisna olarak ele alındığında JSoup iyi işlemez.