在我的应用程序中,在AWT的事件调度线程(EDT)中启动的某些进程可能会在特定情况下中断.然后它等待用户的输入.唉,由于进程位于EDT中,整个应用程序冻结,用户无法重新启动进程,从而造成死锁.有没有办法打断EDT并从另一个线程中启动一个新的事件泵?然后,用户将能够与UI交互.
我想要做的事情看起来或多或少像打开一个模态对话框,除了我不想要一个对话框,因为我的组件很复杂.我宁愿在我的根窗格中显示它.所以我看看它是如何在java.awt.Dialog中完成的,并对它有很好的理解,但是使用的最重要的类(EventDispatchThread,SequencedEvent,...)受到保护,因此对我来说无法访问.
谢谢大家的答案.
我会更具体.我实际上正在开发一个嵌入了自己开发的脚本语言的应用程序.我正在为这种语言开发调试器.调试器(作为所有调试器)将在满足断点时停止脚本执行.脚本化进程可以从代码中的许多地方(包括来自EDT)触发,因此将该进程从EDT中取出不是一种选择.我希望将调试器UI嵌入到应用程序中(准确地在侧窗格中).因此,当遇到断点时,我需要中断当前线程(可能是EDT,主要不是说),并且至少调试器的UI仍然应该响应.另外我正在开发JDK 1.4,所以无法使用JDK7唉.
我目前正在做的是打开嵌入了调试器的JDialog.一切正常,但正如我所说,我对此解决方案并不完全满意,因为我真的希望我的调试器嵌入到我的主窗口中.