我最近了解到 Sun 的/Oracle 的最新指南说,任何 Swing 对象(包括构造函数)的任何 Swing 方法都必须在 EDT 之外调用。
相同的严格标准是否也适用于所有“视觉”AWT 类?如果不是,那么 ** 对他们的规则是什么?
之后
关于 Swing 和 EDT:2009 年的讨论。
引用:“除了实际的线程安全以及可见性和同步等相关问题之外,我认为还有一个软件问题。Swing 组件通常具有某种类型的“侦听器”,这些侦听器旨在在 EDT 上执行。
由于这些侦听器是异步的并响应事件(如属性更改),因此可以在构建 GUI 时触发这些侦听器。结果是当您在主线程中构建时,一些侦听器正在 EDT 上执行,并且一些侦听器也可能在其他线程上运行(因为侦听器被混淆并在错误的线程上触发)。结果是一个不可预测的巨大混乱。”
也许他们不知道他们在说什么......但目前我正在采取“比抱歉更安全”的方法。Potochkin,在http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html似乎认为我们熟悉后来更严格的规则