两个GUI框架由一个EDT处理

时间:2013-07-21 12:25:24

标签: java swing jframe event-dispatch-thread

我的Java应用程序中有两个GUI框架。我注意到两个帧都由同一个EDT处理。这是有道理的,因为与处理器处理它们相比,用户在生成事件时要慢一些。但是如果我把睡眠呼叫付诸行动,那么EDT会在指定的时间内进行睡眠。这真的很有意义,但问题是当EDT正在睡觉时我可以用我的另一帧生成事件,虽然它没有显示按钮点击的动画,但是一旦它从睡眠状态出来,事件就由EDT处理。我无法理解流程,请帮助我。

2 个答案:

答案 0 :(得分:4)

建议:

  • 从不 在Swing事件线程上调用Thread.sleep(...)。 NEVER。
  • 如果您需要两个窗口(并确保确实确实需要这个),那么应该是一个对话框。
  • 如果你想在一个窗口中“冻结”事件而第二个窗口处于活动状态,请将第二个窗口设为 模态 JDialog或JOptionPane(实际上是同样的事情)。

答案 1 :(得分:4)

  • 你不应该在EDT上Sleep,也不应该执行任何耗时的行动。
  • 当EDT唤醒时,所有鼠标点击“溢出”的原因是事件从EDT外部被提取到事件队列,并且只要EDT可以处理它们就会被处理。