事件调度线程执行

时间:2014-01-02 21:34:34

标签: java swing user-interface event-dispatch-thread

使用Java Swing,是否可以暂停当前线程Runnable并为事件调度线程提供空间来更新gui?

我知道多线程(SwingWorker class)是可能的,但我想知道是否有更简单的方法来实现单线程程序(也就是说:我的所有代码都在gui的Run()中)。

E.g。 Matlab有非常方便的drawnow;方法

如果没有:如何将更新任务拆分为第二个线程而不必重写任何内容?那会是来自this link从正在运行的线程中更新gui 吗?

1 个答案:

答案 0 :(得分:2)

简短的回答是否定的。如果您暂停当前线程(根据您是EDT),则暂停EDT ...

您可以使用repaint之类的方法请求更新UI,但这也假设您没有使用循环和暂停等功能阻止EDT,因为EDT需要时间来处理这些请求。 / p>

不,我不会按照链接的建议,因为它违反了Swing的单线程,通过更新EDT之外的组件

根据您的需要,您需要使用javax.swing.TimerSwingWorker。是的,您可以使用Thread,您有责任确保将所有UI更新同步回EDT,其他两个建议提供机制。

请查看Concurrency in Swing了解详情