gpt4 book ai didi

java - Java 中的 EDT,它是如何工作的,它的行为是否像普通线程(单线程或多线程)?

转载 作者:行者123 更新时间:2023-12-03 12:56:12 26 4
gpt4 key购买 nike

这是一个初学者问题:
我正在开发一个使用 TCP 传递消息的小型聊天程序,我有一个简单的 GUI 来显示它,我已经完成了程序,但是 EDT 使我很困惑......

  • EDT 的行为是否像“扩展线程”一样?我想这是一个单线程,因为我需要工作线程来处理繁重的逻辑,但显然我不能做 Thread.sleep/yield(我有一个 而循环 不断从输出流读取消息并附加到 jTextArea ,在 主线程 中运行,我尝试通过设置错误标志来终止 而循环 ,然后屈服于 主线程 4),567 did1010x104567920 没有工作
  • 我不太确定监听器是如何工作的,如果我必须写它……我可能会为每个监听器启动一个线程,一旦我听到一些东西我就会处理它……但这绝对是错误的,因为它将使 EDT 成为 多线程 (很多耳朵)但是 单线程 在此过程中(只有 1 个大脑)

  • 这一定是我知识不足!!因为在我的脑海中,我无法弄清楚如何 触发事件 ......你按下一个按钮,java 突然知道了?我一定错过了什么。

    我第一次发帖提问,希望能说清楚

    最佳答案

    事件调度线程是 Thread和其他任何一样 Thread在 java 。

    它负责调度所有事件和重绘请求(以及其他一些事情,比如运行 synchronized Runnable )。您采取的任何阻止 EDT 的操作都将阻止它处理这些事件,使其看起来像是您的应用程序已挂起……因为基本上它已挂起。

    与任何 UI 组件的所有交互都必须在 EDT 的上下文中执行。这意味着您永远不应该尝试从任何 Thread 创建或更新任何 UI 组件。除了 EDT。

    如果您需要执行任何阻塞或耗时的操作,您应该使用另一个线程。 SwingWorker是一个很好的起点。

    向组件添加监听器不会创建更多线程。 EDT 会将事件通知发送回监听器(这是一个非常简短的解释,但这个概念是合理的),这是您永远不应该阻止 EDT 的原因之一。

    如何引发事件取决于组件。例如,鼠标和键盘事件将由依赖于操作系统/实现的 native 代码部分发布到事件队列(据我所知,来自 ToolKit ,但我可能是错的)。
    actionPerformedJButtons 引发的事件可以直接针对监听器执行(不是通过事件队列调度),而是在 EDT 内执行。这是由任意数量的事件引发的,但通常是由鼠标点击和特殊键事件引起的。 JButton收到这些通知是因为它在事件队列中注册了自己。

    虽然了解工作原理是一个很好的目标,但您需要问问自己,这是否重要(在短期内)?你知道电是如何从电灯开关到电灯的吗?或者你只在乎它吗?

    了解使用它所需的规则(不要将锋利的物体插入电源点),并随着您变得更加自信而理解。

    关于java - Java 中的 EDT,它是如何工作的,它的行为是否像普通线程(单线程或多线程)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15377041/

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