Java 在Swing中从事件调度线程以外的其他线程泵送事件

Java 在Swing中从事件调度线程以外的其他线程泵送事件,java,swing,event-dispatch-thread,Java,Swing,Event Dispatch Thread,在我的应用程序中,在特定情况下,在AWT的事件调度线程(EDT)中启动的某些进程可能会中断。然后等待用户的输入。唉,由于进程位于EDT中,整个应用程序都会冻结,用户无法重新启动进程,从而造成死锁。有没有办法中断EDT并从另一个线程启动新的事件泵?然后用户将能够与UI交互 我试图做的事情看起来或多或少像是打开一个模态对话框,只是我不想要一个对话框,因为我的组件很复杂。我宁愿在我的根窗格中显示它。因此,我在java.awt.Dialog中查看了它是如何完成的,并且对它有了相当好的理解,但是所使用的最

在我的应用程序中,在特定情况下,在AWT的事件调度线程(EDT)中启动的某些进程可能会中断。然后等待用户的输入。唉,由于进程位于EDT中,整个应用程序都会冻结,用户无法重新启动进程,从而造成死锁。有没有办法中断EDT并从另一个线程启动新的事件泵?然后用户将能够与UI交互

我试图做的事情看起来或多或少像是打开一个模态对话框,只是我不想要一个对话框,因为我的组件很复杂。我宁愿在我的根窗格中显示它。因此,我在java.awt.Dialog中查看了它是如何完成的,并且对它有了相当好的理解,但是所使用的最重要的类(EventDispatchThread、SequencedEvent等)是受保护的,因此我无法访问


谢谢大家的回答

我会说得更具体一些。我实际上正在开发一个嵌入了一种本土脚本语言的应用程序。我正在为这种语言开发一个调试器。无论何时遇到断点,调试器(与所有调试器一样)都会停止脚本执行。脚本化流程可以从代码中的许多位置(包括EDT)触发,因此将流程从EDT中移除不是一个选项。我希望调试器UI嵌入到应用程序中(确切地说是在侧窗格中)。因此,当遇到断点时,我需要中断当前线程(可能是EDT,不是说主要线程),并且至少调试器的UI应该仍然有响应。另外,我正在JDK1.4之上开发,所以无法使用JDK7


我目前正在做的是打开一个嵌入了调试器的JDialog。这一切都很好,但正如我所说的,我对这个解决方案并不完全满意,因为我确实希望我的调试器嵌入到我的主窗口中。

如果您使用的是JDK7,您可以使用该接口。可以通过方法创建此接口的实例

有一个例子,但服务器似乎暂时处于脱机状态

一个小的编辑,因为我仍然不能完全确定我理解你的问题


如果要等待工作线程的用户输入,可以使用
SwingUtilities.invokeAndWait
方法并使用阻塞方法(例如,显示
JOptionPane
以检索用户输入)。由于
invokeAndWait
的原因,您的工作线程将停止,直到处理EDT上的
Runnable
。如果您在EDT上使用阻塞方法检索用户输入,
Runnable
只有在用户提供了他/她的输入时才会完成

将您的进程移动到EDT之外,使用???下面你的答案在哪里?无论如何,您可能会找到一些黑客方法来解决您的问题,但是如果我是,我宁愿尝试一次性地将事情做好,而不是在我问问题时使用一些不健壮的黑客方法,因为我被Java 4绊倒了。从那以后,我换了其他工作,我认为Java7现在已经足够普及了。