【发布时间】:2012-08-06 09:03:49
【问题描述】:
我有几个关于 Swing 和使用 EDT 进行 GUI 更新的问题。我刚开始阅读这些东西,所以我是这个领域的初学者:
- 在 EDT 上运行需要哪些操作?如果他们不这样做,是否只是引发了一个异常?
- 是否有任何特定时间我们实际上是自动在 EDT 上的?
- 如果我们使用
SwingUtilities.invokeLater安排任务,我们会将其排入当前GUI 更新任务队列(EDT),对吗? - 对上述队列的访问我猜是同步的,或者使用了一些并发集合,但是如果我调度两个GUI更新任务,从两个后台线程,是不可能说哪个会先添加?例如,如果线程 1 FIRST 提交了将 JLable 的文本设置为“是”的任务,然后不久之后,第二个线程出现并提交了将该值设置为“否”的任务,我们是否保证结果将是“是”,还是仅仅是操作系统如何安排这些事情的问题?
-
SwingWorker 究竟如何确保
done()方法在 EDT 上运行?它设置了以下代码:future = new FutureTask<T>(callable) { @Override protected void done() { doneEDT(); setState(StateValue.DONE); } };
所以我想知道 FutureTask 是否以某种方式确保调用了 invokeLater?
感谢您的所有回答。
【问题讨论】:
标签: java swing event-dispatch-thread