JavaFX中的JOptionPane使窗口“无响应”

时间:2014-01-14 08:31:58

标签: java javafx-2 joptionpane

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

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

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

这一切都在Windows中运行。

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

编辑:我使用的代码是(来自主JavaFX线程) JOptionPane.showMessageDialog(null, "message here"); 也许null导致问题?

2 个答案:

答案 0 :(得分:2)

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

  1. 创建一个Swing应用程序并将所有fx节点放在JFXPanels
  2. 仅使用FX节点,例如using a modal stage或使用外部库,例如ControlsFX(仅限JavaFX 8,但还有其他库可用于JavaFX 2)
  3. 将您的JOptionPane放在SwingNode(仅限JavaFX 8)
  4. 对于1和3,您需要小心在Swing EDT线程和JavaFX线程上的JavaFX节点上创建/修改Swing组件(除非您将两者与Java 8中提供的新JVM选项合并)。如果你混合使用Swing和JavaFX,我不能100%确定模态周是如何工作的。

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

答案 1 :(得分:0)

不要在JavaFX应用程序中使用JOptionPane,而是使用JavaFX Alert。警报是在Java 8u40中引入的。

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

另见: