Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单线程环境中单个事件源的Java Swing多事件侦听器_Java_Multithreading_Swing - Fatal编程技术网

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

单线程环境中单个事件源的Java Swing多事件侦听器,java,multithreading,swing,Java,Multithreading,Swing,我目前正在学习Swing,一般来说,我是GUI开发新手。在我的测试应用程序中,对于单个事件源,我有多个事件监听器,我想知道这些事件监听器中的哪一个将首先被执行 另外,我很想知道Swing事件处理在单线程环境中是如何工作的,特别是当您对单个事件源有多个侦听器时 最后,我想知道一些在Swing中必须使用多线程的常见情况 谢谢 我将尝试回答您所有的3个问题。首先,没有指定ActionListeners激发的顺序。人们永远不应该假定他们将发射的特定命令。如果需要按特定顺序执行操作,请将它们放在相同的Ac

我目前正在学习Swing,一般来说,我是GUI开发新手。在我的测试应用程序中,对于单个事件源,我有多个事件监听器,我想知道这些事件监听器中的哪一个将首先被执行

另外,我很想知道Swing事件处理在单线程环境中是如何工作的,特别是当您对单个事件源有多个侦听器时

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


谢谢

我将尝试回答您所有的3个问题。首先,没有指定
ActionListener
s激发的顺序。人们永远不应该假定他们将发射的特定命令。如果需要按特定顺序执行操作,请将它们放在相同的
ActionListener

编程Swing时,您将“几乎”始终处于多线程环境中。有一个线程称为事件分派线程(EDT)。这是处理所有事件的线程。您所做的任何其他处理都应该在不同的线程上完成,否则您的Swing GUI可能会变得无响应

Swing中多个线程的一种常见情况是,任何时候都需要执行一些需要较长时间的处理。(密集计算、IO、数据库连接)您需要在EDT之外的单独线程上完成这些艰巨的工作。这将使您的GUI保持响应性

Oracle网络有一个关于Swing中并发性的很好的教程。我推荐你

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

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

Swing中任何多线程问题的标准答案都是使用。它允许您轻松地在单独的线程上与EDT协调后台工作。像往常一样,Oracle有一个。

我没有直接提到SwingWorker,但在其他方面是一个非常好的答案。@extraneon:yes
SwingWorker
是Swing中多线程的典型答案。我将在结尾添加一个简短的提示。从设计的角度来看,可以创建一个ActionListener,您可以在其中注册其他ActionListener(或其他类),这些ActionListener可以按设置的顺序执行。@额外:您可以设计将按特定顺序执行的代码。
ActionListeners
。但一般来说,core Swing并没有指定顺序。@jjnguy感谢您对答案的详细解释。。。!!