SwingWorker
用于以下目的:
- 用于在不同线程中运行长时间运行的任务,以防止 GUI 无响应
- 用于通过方法在任务结束时使用长时间运行的任务产生的结果更新 GUI
done()
。 publish()
用于在和process()
方法的帮助下使用任务生成和发布的中间结果不时更新 GUI 。
SwingUtilities.invokeLater()
可以按如下方式执行上述任务:
SwingWorker.execute()
我们可以执行,而不是从 EDT执行方法,ExecutorService.submit(new MyRunnable())
因为它还会创建另一个可以执行长时间运行的任务的线程。- 为了在任务结束时更新 GUI,我们可以将代码(用
done()
case1 的方法编写)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
放在任务结束时。 - 为了在任务中间更新GUI,我们可以将代码(写在
process()
case1的方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
放在我们调用case1方法的地方publish()
。
我问这个问题是因为问题中指定的问题Java - SwingWorker - 我们可以从其他 SwingWorker 而不是 EDT 调用一个 SwingWorker可以解决SwingUtilities.invokeLater()
但不能解决SwingWorker