【问题标题】:About event dispatch thread关于事件派发线程
【发布时间】:2013-06-27 15:32:55
【问题描述】:

我正在阅读一些关于 Java 中的 Event Dispatch Thread 的文章。因为它意味着 GUI 的创建和 GUI 组件的所有事件都应该在这个线程中执行。如果查看创建 JFrame 时在 net beans IDE 上生成的一些代码,我可以同意此评论的一部分。因为它包含一些将 GUI 创建定向到 EDT 的代码,例如 java.awt.EventQueue.invokeLater(new Runnable().....

Ex:
public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Temp().setVisible(true);
        }
    });
}

但是我们在事件处理方法上编写的表达式没有那种直接的语句。

Ex
private void btnTodayActionPerformed(java.awt.event.ActionEvent evt) {                                         
    xxxxxxxxxxxxxxxxx ;
    xxxxxxxxxxxxxxxxxxxxxxxxxxx;
} 

那是哪里?还是编译器完成的?? 请好心帮助我..这将是一个愚蠢的问题......

【问题讨论】:

    标签: java event-dispatch-thread


    【解决方案1】:

    顾名思义,所有 UI 事件,包括点击事件,都在 event 调度线程上引发。

    事件分派线程实际上做的是运行一个操作系统级别的消息循环来接收 UI 事件的通知,然后将这些事件分派给适当的 Swing 组件。

    【讨论】:

      【解决方案2】:

      事件总是在 EDT 上引发,因此您为回调编写的任何代码也在 EDT 上,当您已经在使用不同的线程时,您只需要 invokeLater(或类似的)(例如,不应将长任务在 EDT 上执行,因为它们冻结了整个界面,而是应该在自己的线程上执行并定期使用 invokeLater 来更新界面)

      【讨论】:

        猜你喜欢
        • 2014-04-04
        • 2013-04-26
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 2014-07-18
        • 2019-11-06
        • 2014-08-13
        • 1970-01-01
        相关资源
        最近更新 更多