java - Swing 事件处理程序是否应该在 EDT 事件之后排队?

标签 java swing edt

Swing 事件处理代码是否应该在 EDT 事件之后排队?如果是这样,是事件源负责安排事件处理程序,还是事件处理程序负责稍后安排实际处理代码?

考虑:

JButton b = new JButton();
b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        /*
         * SNIP 1
         * do something that may affect other
         * components or generate new events...
         */

        // SNIP 2
        EventQueue.invokeLater(new Runnable(){
            public void run(){
                /*
                 * do something that may affect other
                 * components or generate new events...
                 */
            }
        });
    }
});

SNIP 1 在收到事件时运行处理程序代码。如果 JButton 负责通过 EventQueue.invokeLater() 安排事件,那么这可能是正确的。 SNIP 2 接收事件,并负责在接收到事件后安排处理程序代码(并由所有其他监听器处理此特定事件类型)。哪个是正确的?

编辑:为了清楚起见,我想稍后在 EDT 安排事件处理程序,因为在第一个事件处理程序中更改状态可能会隐藏组件的其他事件处理程序在事件发生时的原始状态。

最佳答案

如果我误解了您的问题,请告诉我,但 Swing 事件监听器中的所有代码都是在 EDT 上运行的,因此无需将任何内容排队到 EDT。我很少看到像 snip2 这样的代码用在 Swing 监听器中,通常是监听器在后台线程中调用匿名内部 Runnable。

关于java - Swing 事件处理程序是否应该在 EDT 事件之后排队?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911927/

相关文章:

java - X500Name 到 java.security.Principal

java - 应用程序在打开时立即崩溃

Java Swing : How to prevent JOptionPane. showConfirmDialog() 聚焦?

java - 从 EDT (EventQueue) 停止另一个线程

java - RMI over SSL - 通信速度慢

java - "p"中的 "javap"代表什么?

java - 如何在 JPanel 中使用 RectangularShape 获取 JPanel 进行绘制

java - 如何为 JButton 集合动态分配名称?

java - 如何丢弃/合并重复的 AWT 事件?

javascript - 使用 toLocaleString() 从通过 javascript 返回的日期中删除 'EDT' 的最佳方法