【发布时间】:2010-05-13 18:41:35
【问题描述】:
SwingWorker 用于以下目的:
- 用于在不同线程中运行长时间运行的任务,以防止 GUI 无响应
- 用于通过
done()方法使用长时间运行的任务在任务结束时产生的结果更新 GUI。 - 在
publish()和process()方法的帮助下,使用任务生成和发布的中间结果不时更新 GUI。
SwingUtilities.invokeLater()可以执行上述任务如下:
- 我们可以执行
ExecutorService.submit(new MyRunnable()),而不是从 EDT 执行SwingWorker.execute()方法,因为它还会创建另一个可以执行长时间运行任务的线程。 - 为了在任务结束时更新GUI,我们可以将代码(写在case1的
done()方法中)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())放在任务结束时。 - 为了在任务中间更新GUI,我们可以将代码(写在case1的
process()方法中)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())放在我们在case1中调用publish()方法的地方。
我问这个问题是因为Java - SwingWorker - Can we call one SwingWorker from other SwingWorker instead of EDT 中指定的问题可以通过SwingUtilities.invokeLater() 解决,但不能通过SwingWorker 解决
【问题讨论】:
-
我不太确定“问题”是什么。
-
@akf 如果你不确定,那就离开吧。简单:)
-
你提到的问题可以使用 SwingWorker 解决。在那里查看我的答案。
标签: java swingworker swingutilities