Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多个Swing事件调度线程_Java_Multithreading_Swing_Modal Dialog_Ui Thread - Fatal编程技术网

Java 多个Swing事件调度线程

Java 多个Swing事件调度线程,java,multithreading,swing,modal-dialog,ui-thread,Java,Multithreading,Swing,Modal Dialog,Ui Thread,我想在Swing中创建一个新的事件调度线程,但我很难在网上找到任何关于如何实现这一点的参考。我在.NET中通过创建一个新线程并调用Application.run(…)实现了这一点。有人这样做过吗?有可能在秋千上吗 仅供参考,我之所以尝试这样做是因为我正在编写一个Eclipse插件,我想弹出一些对话框,这些对话框不是IDE的模态,而是UI逻辑的模态(阻塞)。我可以使用非模态对话框和回调来实现这一点,但这需要增加代码多线程的开销。如果前者不可能的话,我会回到这个问题上来。我对你的问题有点困惑,因为你

我想在Swing中创建一个新的事件调度线程,但我很难在网上找到任何关于如何实现这一点的参考。我在.NET中通过创建一个新线程并调用Application.run(…)实现了这一点。有人这样做过吗?有可能在秋千上吗


仅供参考,我之所以尝试这样做是因为我正在编写一个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()的调用。