使用Java,是否有可能暂停当前线程Runnable并为事件分派线程提供空间来更新gui?
我知道多线程(SwingWorker class)是可能的,但我想知道是否有更简单的方法来实现单线程程序(也就是:我的所有代码都在gui的Run()中)。
例如Matlab有非常方便的drawnow;方法。
如果不是:如何将更新任务拆分为第二个线程,而不必重写任何内容?这是从此链接运行的线程中更新gui吗?
发布于 2014-01-02 21:44:17
简短的回答是否定的。如果您暂停当前线程(根据您的说法是EDT),那么您将暂停EDT。
您可以使用像repaint这样的方法来请求更新UI,但是这也假设您没有用循环和暂停之类的东西阻塞EDT,因为EDT需要时间来处理这些请求。
不,我不会听从链接的建议,因为它通过更新EDT外部的组件违反了Swing的单线程
根据您的需要,您需要使用javax.swing.Timer或SwingWorker。是的,您可以使用Thread,您将负责确保UI的所有更新都同步回EDT,其他两项建议提供了相应的机制。
有关更多细节,请查看在Swing中并发
https://stackoverflow.com/questions/20892336
复制相似问题