【问题标题】:Event Dispatching Thread execution事件调度线程执行
【发布时间】:2023-03-25 23:26:01
【问题描述】:

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

我知道多线程 (SwingWorker class) 是可能的,但我想知道对于单线程程序是否有更简单的方法来实现这一点(又名:我所有的代码都在 gui 的 Run() 中)。

例如Matlab有很方便的drawnow;方法

如果不是:如何将更新任务拆分到第二个线程而无需重写任何内容?这会是来自this link从正在运行的线程更新 gui 吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    查看Concurrency in Swing了解更多详情

    【讨论】:

      猜你喜欢
      • 2015-11-06
      • 2011-11-11
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2014-08-10
      相关资源
      最近更新 更多