2013-05-14 24 views
5

Tôi đang gặp một số vấn đề JSoup lạ khi chạy ứng dụng JavaFX của mình từ trình duyệt (hoặc dưới dạng web-start).JSoup ngẫu nhiên ném java.io.IOException: luồng được đóng khi chạy từ trình duyệt

Khi tôi chạy từ bên trong IDE (Eclipse hoặc Netbeans) hoặc dưới dạng ứng dụng độc lập, nó chạy bình thường. Khi tôi cố gắng chạy như một trang web bắt đầu hoặc từ trình duyệt (Chrome), JSoup ngẫu nhiên ném một luồng "java.io.IOException: bị đóng".

Trang web tôi đang cố gắng phân tích cú pháp là thepiratebay.sx. Khi tôi lần đầu tiên chạy ứng dụng (từ trình duyệt), tôi nhận được lỗi này. Với ứng dụng đang chạy, nếu tôi cố phân tích lại, đôi khi nó hoạt động ... đôi khi. đang

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

Và ném ngoại lệ:

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) 

Có ai có một ý tưởng về những gì có thể gây ra điều này?

Xin cảm ơn trước.

+1

Đây là vấn đề đã biết với JSoup. https://github.com/jhy/jsoup/issues/336 – Skylion

Trả lời

2

Tôi nghĩ tôi đã tìm được giải pháp. Đặt mã này trước khi bạn gọi JSoup. Rõ ràng, các applet và web bắt đầu thiết lập giá trị này thành true. Bây giờ, tôi tự hỏi tại sao Sun buộc bạn truy cập một biến tĩnh không tĩnh.

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

JSoup không xử lý tốt khi URL được lưu trữ và coi đó là ngoại lệ.

Các vấn đề liên quan