【问题标题】:JOptionPane in JavaFX Making Window 'Not Respond'JavaFX 中的 JOptionPane 使窗口“无响应”
【发布时间】:2014-02-02 05:45:36
【问题描述】:

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

我遇到的一个问题是,如果创建一个新对话框并且在 5 秒左右内未将其关闭,这将导致 JavaFX 主阶段进入“无响应”状态

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

这一切都在 Windows 中运行。

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

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

【问题讨论】:

  • 也许你应该去this
  • 我已经对这些对话框进行了彻底的试验,它们提供的问题多于解决方案。对话框的大小(比我的舞台大)和它们在屏幕上弹出的方式是两个主要的。我想这似乎很挑剔,但我相信应用程序的外观对其成功至关重要。
  • 还有this 一个?看起来好多了。
  • @MarkoTopolnik 在这种情况下controlsFX 可能更好(JavaFX 8)。
  • 为什么你使用一个swing组件而不是a modal stage?您是否在摇摆线程上创建/显示 JOptionPane ?你能显示一些代码吗?等等。

标签: java javafx-2 joptionpane


【解决方案1】:

您不能只显示来自 FX 线程的 JoptionPane,它是一个 Swing 组件。您有三个选择:

  1. 创建一个 Swing 应用程序并将所有 fx 节点放在 JFXPanels 中。
  2. 仅使用 FX 节点,例如通过 using a modal stage 或使用外部库,例如 ControlsFX(仅限 JavaFX 8,但还有其他可用于 JavaFX 2 的库)
  3. 将您的 JOptionPane 放入 SwingNode(仅限 JavaFX 8)

对于 1 和 3,您需要小心地创建/修改 Swing EDT 线程上的 Swing 组件和 JavaFX 线程上的 JavaFX 节点(除非您将两者与 Java 8 中可用的新 JVM 选项合并)。如果您将 Swing 和 JavaFX 混合使用,我也不能 100% 确定模态周的工作原理。

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

【讨论】:

  • 感谢您的介绍。看来我必须使用 Java 8 了:P
  • 2 中的模态阶段选项适用于 FX 2.x。但是,如果您可以使用 java 8,那么这是一个很大的进步(现在距离正式发布只有 2 个月!)。
【解决方案2】:

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

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

另见:

【讨论】:

    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多