0

私は Thread を初めて使用し、GUI を更新するために SwingWorker を使用したいと考えていましたが、別のスレッドがいくつかの html を分析してファイルをダウンロードしています..

これが私のコードです:

protected Void doInBackground() throws Exception {

    analyzeHTML();
    download();

    return null;
}

呼び出し全体が時々失敗します:

   SEVERE: null
java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:150)
    at java.net.SocketInputStream.read(SocketInputStream.java:121)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:429)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:446)
    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:446)
    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 hanserdownloader.LinkProcessorThread.analyzeHTML(LinkProcessorThread.java:208)
    at hanserdownloader.LinkProcessorThread.doInBackground(LinkProcessorThread.java:139)
    at hanserdownloader.LinkProcessorThread.doInBackground(LinkProcessorThread.java:113)
    at javax.swing.SwingWorker$1.call(SwingWorker.java:296)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at javax.swing.SwingWorker.run(SwingWorker.java:335)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

だから私の質問は:

上記の 2 つのメソッドは、one/doInBackground() から呼び出されたときにワーカー スレッドでも実行されますか。そうあるべきですよね?

ばかげた質問のようですが、このタイムアウトエラーが (実際の http-timeout ではなく) スレッドの混乱によって実際に生成されたものではない場合、私は少し不安です..

ご協力ありがとうございました!

4

2 に答える 2