gpt4 book ai didi

java - EDT 具体方法和其他内容

转载 作者:行者123 更新时间:2023-12-02 07:09:15 24 4
gpt4 key购买 nike

我对了解 Swing 乐和 EDT 的追求再次继续......

由于 EDT 是唯一的 EDT,所以我现在想知道哪些方法、构造函数和任何其他内容应该在 EDT 中完成。我知道一般规则,几乎所有创建 Swing 组件或与 Swing 组件交互的代码都必须在事件调度线程上运行,但这是非常普遍的。还据说任何非线程安全的 swing 代码都应该在 EDT 上执行。但我仍然无法判断哪些方法是线程安全的,哪些不是。

我的问题是,是否有最终将在 EDT 上排队的命令列表? (我这么说是因为您不必从 EDT 调用 repaint(),但它仍然会执行)。

如果我知道我的方法将在哪里执行(并且我可以估计相对于其余代码的时间),我可以编写更高效且更易于理解的代码。

到目前为止,我的大部分 EDT 工作都是在黑暗中进行的,因此编写了错误的代码,然后,当我无法弄清楚时,通常会惹恼这里的人们。

那么是否有一个列表,也许是我错过的 Javadoc 中的某些内容?也许有一些更具体的规则(例如,如果方法的名称中有“e”,则必须在特定的 EDT 类型上执行)?

最佳答案

  • 没有什么复杂、奇怪或神秘的事情,EDT 一直存在,直到所有事件都完成,

  • 如果 EDT 中的所有事件均已完成,则 SwingUtilities.isEventDispatchThread() 始终返回 false

  • 注意鼠标和按键事件可以向 EDT 生成新事件(一些 JComponent 在内部对这些事件使用react,在 API 中实现的通知程序向 EDT 触发新事件,然后 EDT 处于 Activity 状态,例如容器中的 JButton,但没有焦点从 ButtonModel 触发事件,对 Java6 有效,在 Win7 及更高版本中无效),是否添加 XxxListener 无关紧要,必须在没有

  • 的情况下进行测试
  • 在所有情况下调用Later() Activity EDT,不包括使用Thread.sleep(int)卡住的情况

  • Thread.sleep(int) 可能会导致在 sleep() 期间丢失所有事件,或者 Swing GUI 仅在 Mouse_Hover_Over 时刷新

编辑

  • 在 Java7 中可以创建 SecondaryLoop ,但我想念这个接口(interface)的真正原因,因为所有事件仍然必须在 EDT 上完成,多线程可以在 Java1.4 中创建,与 Java7 相同

  • 与 WinXP 上的 Java6 中的 MetalLookAndFeel 相比,Java7 中的一些线程安全方法不是线程安全的

关于java - EDT 具体方法和其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734302/

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