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