2

我想在 Swing 中创建一个新的事件调度线程,但我在网上找不到任何关于如何执行此操作的参考资料。我通过创建一个新线程并调用 Application.run(...) 在 .NET 中完成了这项工作。有人做过吗?在 Swing 中可以吗?

仅供参考,我尝试这样做的原因是因为我正在编写一个 Eclipse 插件,并且我想弹出对 IDE 来说不是模态但对我的 UI 逻辑来说是模态(阻塞)的对话框。我可以使用非模态对话框和回调来完成此操作,但这需要使我的代码成为多线程的开销。如果前者是不可能的,我会恢复到那个。

4

3 回答 3

5

是的,这是可能的。我已经在 Swing 中完成了这样的多个 EDT 调度线程逻辑。然而,最终结果是它不能可靠地工作。

(a) 所有 JVM 都不能很好地与多个 EDT 线程一起工作(本机代码中的图形渲染逻辑中的同步问题等,IBM JVM 因多个 EDT 线程而失败,Sun JVM 和 Apple JVM 确实有效)

(b) Swing 渲染逻辑很少有导致随机渲染错误发生的错误(例如,http://bugs.sun.com/bugdatabase/view_bug.do ?bug_id=6727829 )。

无论如何,这样做基本上需要建立两个 AppContext,每个都有自己的 EDT 线程。

于 2009-08-12T11:16:51.327 回答
4

我对你的问题有点困惑,因为你提到了 Swing,但又说你正在编写一个 Eclipse 插件。由于问题被标记为 Swing,我将给出 Swing 答案(但发布为 CW)。

有一个事件调度线程。总是有一个事件调度线程,除非根本没有。您不能创建另一个。

但是,您可以更改ModalityType对话框的名称,或更改ModalExclusionType窗口的名称。在这种情况下,如果您自己编写这一切,您可以将顶层窗口设置ModalExclusionTypeAPPLICATION_EXCLUDE.

但同样,我看不出这对您有什么帮助,因为 Eclipse 使用 SWT 而不是 Swing。

于 2009-05-13T17:35:12.887 回答
2

我将放弃我的最后一个答案并重新开始。

在 SWT 中,您可以通过在创建期间传递 SWT.PRIMARY_MODAL 样式标志来创建仅对父模式模式的Shells(窗口)或自定义s。Dialog

请注意,这Dialog是一个抽象类,因此您必须创建自己的类。它可能更容易使用Shell

编辑:

为什么选择 SWT?因为那是 Eclipse 使用的。有关更多详细信息,请参阅:Eclipse 平台插件开发人员指南(压缩 PDF)。最新版本可在 Eclipse 的帮助系统中找到(帮助 > 帮助内容 > 插件开发环境指南。)

于 2009-05-13T17:59:16.467 回答