java - 在 SwingWorker (doInBackground) 中从 Worker-Thread 调用多个方法?

标签 java multithreading methods swingworker

我是 Thread 新手,想要使用 SwingWorker 来更新我的 GUI,而另一个线程正在分析一些 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)

所以我的问题是:

当从 one/doInBackground() 调用这两个方法时,它们是否也在工作线程中运行。应该是吧?

似乎是一个愚蠢的问题,但我有点不安,如果这个超时错误不是真正由某些线程困惑产生的(而不是真正的http超时)..

感谢您的帮助!

最佳答案

这两个方法在工作线程中运行,但顺序运行。因此,首先在工作线程中调用 analyzeHTML,然后在完成后,在同一线程中调用 download

关于java - 在 SwingWorker (doInBackground) 中从 Worker-Thread 调用多个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18648193/

相关文章:

c# - 方法调用中的分配不好的做法?

java - Android Studio gradle list 合并失败

java - 如何让图像每n秒改变一次

java - 'javax.xml.ws.Endpoint' 和 2 种 SSL 方式

multithreading - Julia 中的可用线程数?

java : execute a method over a maximum period of time

java - 服务器 : Socket hangs within unpredictable period time at read stream function

Python threading.Thread 只能通过私有(private)方法 self.__Thread_stop() 停止

用于与 IRC 服务器通信的 Java 套接字

Java 从嵌套类返回