tutorial studio parse example español body javafx jsoup

javafx - studio - JSoup arroja al azar java.io.IOException: la transmisión se cierra cuando se ejecuta desde el navegador



jsoup select (1)

Tengo un problema extraño de JSoup cuando ejecuto mi aplicación JavaFX desde el navegador (o como inicio web).

Cuando corro desde el IDE (Eclipse o Netbeans) o como una aplicación independiente, funciona normalmente. Cuando intento ejecutar un inicio web o desde el navegador (Chrome), JSoup arroja al azar "java.io.IOException: stream is closed".

El sitio que intento analizar es thepiratebay.sx. La primera vez que ejecuto la aplicación (desde el navegador), aparece este error. Con la aplicación ejecutándose, si trato de analizar de nuevo, de lo que funciona ... a veces.

El código 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()); } }

Y la excepción arrojada:

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)

¿Alguien tiene una idea de lo que podría estar causando esto?

Gracias por adelantado.


Creo que encontré una solución. Coloque este código antes de llamar a JSoup. Aparentemente, los applets y el inicio web establecen este valor como verdadero. Ahora, me pregunto por qué Sun te obliga a acceder a una variable estática de forma no estática.

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

JSoup no funciona bien cuando la URL se almacena en caché y la trata como una excepción.