我有一些代码在单独的线程中执行下载,创建的目的是为了让JFrame GUI在下载过程中继续更新。但是,当我使用Thread.join()时,目的完全失败,因为它导致GUI停止更新。我需要一种方法来等待线程完成并仍然更新GUI。等待Java中的线程完成
1
A
回答
4
您可以让下载的任务也将事件发送到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();
正如在comme中指出的那样nts,您通常会使用SwingWorker来做这种事情,但您也可以使用上述的手动方法。
的SwingWorker提供了一个doInBackground
方法,你要坚持你的下载逻辑,一个done
方法,你会坚持代码来通知下载完成的GUI和get
方法得到的doInBackground
结果(如果有一个)。
例如,
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();
相关问题
- 1. Java等待线程完成
- 2. Java多线程等待线程完成
- 3. 等待UI线程完成
- 4. 等待线程完成python
- 5. 使主程序等待线程完成
- 6. 若要完成线程的等待(Android)
- 7. 如何等待一组线程'真的'在java中完成?
- 8. 等待完成Java的过程
- 9. java:为什么主线等待子线程完成
- 10. 等待线程完成执行上
- 11. 等待,直到线程完成摆好
- 12. 如何等待所有线程完成
- 13. 异步等待一个线程完成
- 14. 等待线程循环完成
- 15. 让Android MainActivity等待线程完成
- 16. C#等待所有线程完成Main()
- 17. SDL和C++:等待多线程完成
- 18. 试图等待所有线程完成
- 19. 等待线程池完成执行
- 20. 等待线程完成执行
- 21. C#等待多个线程完成
- 22. 如何等待一个线程完成
- 23. C++等待所有线程完成
- 24. 如何等待所有线程完成?
- 25. ManualResetEvent不等待线程池完成
- 26. 新线程永不完成等待WebBrowser
- 27. AJAX线程 - 如何等待它完成?
- 28. 等待一个线程在java中完成
- 29. Java等待runnable完成
- 30. Java等待JFrame完成
检查[SwingWorker类](http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html) – m0skit0