0

如果调用此方法的线程都使用 Swing Timer 或SwingUtilities.invokeLater(). 我认为没有必要在 Swing Timer 任务中调用 invokeLater() 。

所以我会有一些 Swing 计时器和一些观察者来更新我的组件。观察者都调用invokeLater()和 Swing Timers 直接调用我的任意方法updateComponents()

如果它仍然可以导致死锁,invokeLater()我会确保不会发生死锁吗?

4

1 回答 1

2

Swing Timer 触发的动作,以及提交到的可运行invokeLater对象,都在 Event Dispatch Thread 上按顺序执行,只要你不参与invokeAndWait,就没有其他线程在等待动作完成。因此,仅此使用模式不会导致死锁。如果确实遇到死锁,则原因与 EDT 及其事件处理无关。

您不需要invokeLater来自任何事件回调,包括提交给 Swing Timer 的事件回调,因为它们已经保证在事件调度线程上被调用。

于 2013-12-15T13:50:19.443 回答