JavaFX制作窗口中的JOptionPane';不响应';

JavaFX制作窗口中的JOptionPane';不响应';,java,javafx-2,joptionpane,Java,Javafx 2,Joptionpane,我正在构建一个JavaFX应用程序,并正在使用JOptionPane显示对话框 我遇到的一个问题是,创建一个新对话框并在5秒左右的时间内不关闭它会导致主JavaFX阶段进入“无响应”状态 在新线程中运行joptionpane代码可以工作,但会导致对话框不是模态的,这不适合我正在构建的应用程序 这些都是在Windows中运行的 任何解决无响应问题的方法都将不胜感激:) 编辑:我使用的代码是(来自主JavaFX线程) JOptionPane.showMessageDialog(空,“此处消息”) 可

我正在构建一个JavaFX应用程序,并正在使用JOptionPane显示对话框

我遇到的一个问题是,创建一个新对话框并在5秒左右的时间内不关闭它会导致主JavaFX阶段进入“无响应”状态

在新线程中运行joptionpane代码可以工作,但会导致对话框不是模态的,这不适合我正在构建的应用程序

这些都是在Windows中运行的

任何解决无响应问题的方法都将不胜感激:)

编辑:我使用的代码是(来自主JavaFX线程)
JOptionPane.showMessageDialog(空,“此处消息”)

可能是null导致了问题

不能仅从FX线程显示JoptionPane,它是一个Swing组件。您有三种选择:

  • 创建Swing应用程序并将所有fx节点放置在中
  • 仅使用FX节点,例如通过或使用外部库,如(仅限JavaFX8,但还有其他可用于JavaFX2的库)
  • 将您的JOptionPane放在一个文件夹中(仅限JavaFX8)
  • 对于1和3,您需要小心地在Swing EDT线程上创建/修改Swing组件,并在JavaFX线程上创建/修改JavaFX节点(除非您使用Java8中提供的新JVM选项将两者合并)。如果混合使用Swing和JavaFX,我不能100%确定模态周是如何工作的

    如果您正在创建一个JavaFX应用程序,没有什么理由不选择2。

    不要在JavaFX应用程序中使用,而是使用JavaFX。警报是在Java8U40中引入的

    由于assylias的回答中指出的原因,在JavaFX中使用JOptionPane可能会有问题

    另见:


    也许你应该选择?我已经对这些对话框进行了彻底的实验,它们提供了更多的问题,而不是解决方案。对话框的大小(比我的舞台还大)和它们在屏幕上弹出的方式是两个主要因素。我想这似乎有些吹毛求疵,但我相信应用程序的外观对其成功至关重要。还有一个呢?看起来好多了。@MarkoTopolnik在这种情况下可能更好(JavaFX8)。为什么要使用swing组件而不是示例?您是否在swing线程上创建/显示JOptionPane?你能展示一些代码吗?等等,谢谢你的介绍。似乎我必须使用Java8:p第2部分中的模式阶段选项与FX2.x一起使用。但如果您可以使用Java8,那么这将是一个巨大的进步(现在距离正式发布只有2个月了!)。