gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:43 24 4
gpt4 key购买 nike

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

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

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

谢谢!

最佳答案

我会尽力回答您的所有 3 个问题。首先,未指定 ActionListener 的触发顺序。永远不要假设他们将开火的特定命令。如果您需要按特定顺序执行操作,请将它们放在相同的 ActionListener 中。

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

Swing 中多线程的一个常见情况是任何时候您需要执行一些需要花费大量时间的处理。 (密集计算、IO、数据库连接)您将希望在与 EDT 不同的线程上完成艰苦的工作。这将使您的 GUI 保持响应。

Oracle 网络有一个关于 Swing 并发性的很棒的教程。我推荐你check it out .

A Swing programmer deals with the following kinds of threads:

  • Initial threads, the threads that execute initial application code.
  • The event dispatch thread, where all event-handling code is executed. Most code that interacts with the Swing framework must also execute on this thread.
  • Worker threads, also known as background threads, where time-consuming background tasks are executed.

Swing 中任何多线程问题的规范答案是使用 SwingWorker .它允许您使用 EDT 轻松协调单独线程上的后台工作。像往常一样,Oracle 有一个 great tutorial on how to use SwingWorker .

关于单线程环境中单个事件源的 Java Swing 多个事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com