Java 多个Swing事件调度线程
我想在Swing中创建一个新的事件调度线程,但我很难在网上找到任何关于如何实现这一点的参考。我在.NET中通过创建一个新线程并调用Application.run(…)实现了这一点。有人这样做过吗?有可能在秋千上吗Java 多个Swing事件调度线程,java,multithreading,swing,modal-dialog,ui-thread,Java,Multithreading,Swing,Modal Dialog,Ui Thread,我想在Swing中创建一个新的事件调度线程,但我很难在网上找到任何关于如何实现这一点的参考。我在.NET中通过创建一个新线程并调用Application.run(…)实现了这一点。有人这样做过吗?有可能在秋千上吗 仅供参考,我之所以尝试这样做是因为我正在编写一个Eclipse插件,我想弹出一些对话框,这些对话框不是IDE的模态,而是UI逻辑的模态(阻塞)。我可以使用非模态对话框和回调来实现这一点,但这需要增加代码多线程的开销。如果前者不可能的话,我会回到这个问题上来。我对你的问题有点困惑,因为你
仅供参考,我之所以尝试这样做是因为我正在编写一个Eclipse插件,我想弹出一些对话框,这些对话框不是IDE的模态,而是UI逻辑的模态(阻塞)。我可以使用非模态对话框和回调来实现这一点,但这需要增加代码多线程的开销。如果前者不可能的话,我会回到这个问题上来。我对你的问题有点困惑,因为你提到了Swing,然后说你正在编写Eclipse插件。因为这个问题被标记为Swing,所以我将给出一个Swing答案(但发布为CW) 有一个事件分派线程。总是有一个事件分派线程,除非根本没有。您无法创建另一个 但是,您可以更改对话框的名称,或更改窗口的名称。在这种情况下,如果您是自己编写的,您可以将顶级窗口的
ModalExclusionType
设置为
但是,我不认为这对您有什么帮助,因为Eclipse使用SWT而不是Swing。我将放弃我的最后一个答案,重新开始 在SWT中,您可以通过在创建过程中传递SWT.PRIMARY_modal style标志来创建仅对父级具有模态的s(窗口)或自定义s 请注意,
Dialog
是一个抽象类,因此您必须创建自己的类。它可能只是更容易使用Shell
编辑:
为什么是SWT?因为Eclipse就是这么用的。有关更多详细信息,请参阅:(压缩PDF)。Eclipse的帮助系统(帮助>帮助内容>插件开发环境指南)中提供了最新版本。是的,这是可能的。我已经在Swing中完成了如此多的EDT调度线程逻辑。然而,最终的结果是它不能可靠地工作 (a) 所有JVM都不能很好地与多个EDT线程一起工作(本机代码中图形呈现逻辑的同步问题等等,IBM JVM与多个EDT线程一起失败,Sun JVM和Apple JVM确实可以工作) (b) Swing渲染逻辑几乎没有导致出现随机渲染错误的错误(例如)
无论如何,要做到这一点,基本上需要建立两个AppContext,每个AppContext都有自己的EDT线程。@mmyers:据我所知,没有。仅供参考,我的Swing对话框确实会阻止IDE。我仍想知道这在Swing或SWT中是否可行。现在我可以忍受窗户是模态的。如果问题太大,我会咬紧牙关,用无模态对话框重写它。SWT似乎使用了类似的模态系统,所以这可能会让你走上正确的轨道。但我对它不太熟悉,无法详细解释。实际上,插件和WebStart有多个EDT。但是,API不是公共的,您不能将组件混合在一起。我必须承认,我实际上没有意识到Eclipse是用SWT编写的,尽管这是有道理的。我对Java比较陌生,我的背景主要是.NET。但是我知道我实际上可以从我的Eclipse插件创建和显示Swing对话框,因为我没有很多Swing代码,所以我可以潜在地转换为SWT。但是我不认为这会有帮助,因为我不认为我可以将IDE设置为排除模态,这也不是一个好主意。谢谢你的建议。然而,它并没有满足我的需要。我需要一个基本上是无模态的模态类型,即使对直接父级也是如此,同时仍然阻止对open()的调用。