[英]Wait for thread to finish in Java
我有一些代码在一个单独的线程中执行下载,创建后JFrame GUI将在下载过程中继续更新。 但是,当我使用Thread.join()时,目的完全失败,因为它导致GUI停止更新。 我需要一种方法来等待线程完成并仍然更新GUI。
您可以让执行下载的任务也向GUI发出事件。
例如:
Runnable task = new Runnable() {
public void run() {
// do your download
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// call some method to tell the GUI that the download finished.
}
});
}
};
然后运行它,使用Executor (首选方法)或原始线程:
executor.execute(task);
要么
new Thread(task).start();
正如评论中指出的那样,您通常使用SwingWorker来执行此类操作,但您也可以执行上面概述的手动方法。
SwingWorker提供了一个doInBackground
方法,您可以在其中使用下载逻辑,这done
一种done
方法,您可以在其中使用代码来通知GUI下载完成,以及get
doInBackground
结果的get
方法(如果有的话)。
例如,
class Downloader extends SwingWorker<Object, Object> {
@Override
public Object doInBackground() {
return doDownload();
}
@Override
protected void done() {
try {
frame.downloadDone(get());
} catch (Exception ignore) {
}
}
}
(new Downloader()).execute();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.