Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SwingWorker(doInBackground)中从工作线程调用多个方法?_Java_Multithreading_Methods_Swingworker - Fatal编程技术网

Java 在SwingWorker(doInBackground)中从工作线程调用多个方法?

Java 在SwingWorker(doInBackground)中从工作线程调用多个方法?,java,multithreading,methods,swingworker,Java,Multithreading,Methods,Swingworker,我是线程新手,想使用SwingWorker更新我的GUI,而另一个线程正在分析一些html和下载文件 这是我的密码: protected Void doInBackground() throws Exception { analyzeHTML(); download(); return null; } 整个呼叫有时会失败: SEVERE: null java.net.SocketTimeoutException: Read timed out at j

我是线程新手,想使用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)
所以我的问题是:

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

这似乎是一个愚蠢的问题,但我有点不确定,如果这个超时错误不是由线程混乱(而不是真正的http超时)造成的


谢谢你的帮助

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

是的,
doInBackground
在事件调度线程的单独线程中运行。您调用的任何方法都将在同一线程上下文中调用,除非您以某种方式对其进行更改

因此,如果一切顺利,首先将调用
analyzeHTML
,完成后,将调用
download


不过,这也取决于,在您的示例中,如果第一个方法引发了一个类似的
异常
,那么第二个方法将不会被调用。

谢谢您的回答!这确实是服务器的故障,导致了超时。我增加了jsoup组件中的最大超时时间。今天,它就像一个符咒;-)谢谢你的回答!问题其实是服务器的故障,导致了超时!