Java 要启动JOptionPane的线程是什么?

Java 要启动JOptionPane的线程是什么?,java,swing,Java,Swing,我们有一个带有套接字通信和其他线程的Swing应用程序。我们知道需要使用SwingUtilities.invokeLater()从其他线程更新Swing显示。但是JOptionPane呢?我们是否需要从其他线程使用SwingUtilities.invokeLater()来启动JOptionPane 如果回答为“是”,如何使用JOptionPane阻止该过程 如果回答为否,JOptionPane不属于GUI显示吗?是,您需要使用SwingUtilities.invokeLater()启动JOpti

我们有一个带有套接字通信和其他线程的Swing应用程序。我们知道需要使用
SwingUtilities.invokeLater()
从其他线程更新Swing显示。但是
JOptionPane
呢?我们是否需要从其他线程使用
SwingUtilities.invokeLater()
来启动
JOptionPane

如果回答为“是”,如何使用JOptionPane阻止该过程


如果回答为否,JOptionPane不属于GUI显示吗?

是,您需要使用
SwingUtilities.invokeLater()
启动JOptionPane,否则JOptionPane可能没有响应。因为它是一个模态容器,所以默认情况下它应该阻止主容器的输入。有关更多详细信息,请参阅。

答案是肯定的,您只能从EventQueue调用swing组件。看看

如果回答为“是”,则如何使用JOptionPane阻止该过程

答案确实是肯定的。您应该访问/修改/。。。事件分派线程上的所有Swing组件。因此,您的后台线程需要使用某种机制来调用EDT上的
JOptionPane
。使用
SwingUtilities#invokeLater
是一个选项,但不是阻塞选项


使用
SwingUtilities#invokeAndWait
进行阻塞行为。此方法将等待runnable完成后再返回。

SwingUtilities\invokeAndWait
我可能误解了您的问题。我想您希望JOptionPane阻止父帧上的用户输入。如果你想让JOptionPane阻止程序的进一步执行,你需要使用Robin的建议:SwingUtilities.invokeAndWait()-+1直到我读到你对这个问题的评论,我才意识到这个问题可以有两种解释。这次行动可能是按你的方式进行的。