单个线程环境中单个事件源的Java Swing多事件侦听器

Mid*_*lue 7 java swing multithreading

我目前正在学习Swing,我是GUI开发的新手.在我的测试应用程序中,我有一个单个事件源的多个事件列表器,我想知道这些事件监听器中的哪一个将首先被激活.

此外,我很想知道Swing事件处理在单线程环境中是如何工作的,尤其是当您有一个事件源的多个侦听器时.

最后,我想知道一些常见的情况,我必须在Swing中使用多个线程.

谢谢!

jjn*_*guy 12

我会尝试回答你的所有3个问题.首先,ActionListener没有指定s fire 的顺序.人们不应该假设他们会触发特定的命令.如果您需要按特定顺序执行操作,请将它们放在相同的位置ActionListener.

编写Swing时,您"几乎"总是处于多线程环境中.有一个称为事件调度线程(EDT)的线程.这是处理所有事件的线程.您执行的任何其他处理应该在不同的线程上完成,否则您的Swing GUI可能会无响应.

Swing中多线程的常见情况是,您需要进行一些需要较长时间的处理.(强烈的计算,IO,数据库连接)您将希望在与EDT的单独线程上进行艰苦的工作.这将使您的GUI保持响应.

Oracle网络在Swing中有一个很好的并发教程.我建议你看看.

Swing程序员处理以下类型的线程:

  • 初始线程,执行初始应用程序代码的线程.
  • 事件调度线程,执行所有事件处理代码.大多数与Swing框架交互的代码也必须在此线程上执行.
  • 工作线程,也称为后台线程,执行耗时的后台任务.

对Swing中任何多线程问题的规范回答是使用a SwingWorker.它允许您在与EDT的单独线程上轻松协调后台工作.像往常一样,Oracle有一个很好的教程如何使用SwingWorker.

  • 从设计的角度来看,可以创建一个ActionListener,您可以注册其他ActionListener(或另一个类),它们可以按照它们的设置顺序执行. (2认同)