【问题标题】:Java Threads -- Perpetual Loop in Swing Event Dispatch ThreadJava 线程——Swing 事件调度线程中的永久循环
【发布时间】:2010-12-08 22:16:34
【问题描述】:

我有一个SwingWorker 的实现:

public Void doInBackground() throws InterruptedException
{
     while (true)
     {
            while(_update)
            {

            }
     }
}

如果 _update 设置为 false,让 EDT 永久循环是否安全?或者我应该让它每秒休眠一次?

-- 编辑

看起来我没有使用应该使用的 SwingWorker。谢谢大家。我会坚持根据需要创建 SwingWorker。

【问题讨论】:

  • 我完全不明白你为什么要对 EDT 嗤之以鼻?您在该代码中的哪个位置参与了 EDT?
  • 为什么不在_update设置为false时让线程结束,再次设置为true时生成一个新线程?

标签: java multithreading events swing dispatch


【解决方案1】:

让 Event Dispatch Thread 进入循环是不安全的。

需要事件调度线程来提供用户与应用程序的交互。如果您希望某个事件每隔几秒触发一次,则应在每次完成后将它或它的另一个副本放回事件队列中。

【讨论】:

    【解决方案2】:

    您为什么不启动另一个线程并让它根据需要运行/休眠,并让它使用 SwingUtilities.InvokeLater 或任何必要的东西来完成 UI 工作?

    如果没有任何其他上下文,您可能会误用 SwingWorker?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 2014-01-03
      • 2014-08-11
      • 2010-10-25
      • 1970-01-01
      • 2015-04-01
      相关资源
      最近更新 更多