0

我试图了解哪些事件将通过事件调度线程 (EDT) 进行管理。

让我们假设一些简单的事情,一段简单的代码打开一个 JOptionPane,等待用户的响应,然后关闭它。与此对象相关的哪些事件现在放在 EDT 上?是不是:a)只是对象(JOptionPane)的创建。b) 对象生命周期内的所有对象相关事件。C) 其他东西(请说明)。

谢谢,

艾略特

见下文:

        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run(){
                    JOptionPane.showMessageDialog(myComponent, msg);
                }
            });
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
4

2 回答 2

2

据我所知,以下所有“事件”都将在 EDT 中执行:

  • 最终用户直接触发的所有事件(鼠标事件、按键事件)以及由这些事件触发的所有更高级别的事件(动作、焦点...);实际上你可以说所有 AWT 和 Swing EventListeners 总是在 EDT 中被调用
  • 所有绘画代码(由组件的变化或寡妇大小或位置的变化触发,当一个区域需要被绘画时)
  • SwingUtilities.invokeAndWait()通过or调用的任何代码SwingUtilities.invokeLater()
于 2011-10-17T07:20:29.343 回答
1

所有JOptionPane对话框都是模态的:它们阻止用户生成的输入事件到其他窗口,但EventQueue继续处理所有窗口的事件。在此DialogTest,动画在JOptionPane.showMessageDialog()等待输入的同时继续。这里有一个相关的讨论。

于 2011-10-16T17:30:45.203 回答