JavaFX 平台似乎已死(关闭/崩溃)

标签 java swing javafx

我的用例如下:

  • 我有一个 9 行 1 列的 GridBagLayout
  • 前 8 行包含 JPanel
  • 最后一行包含一个JFXPanel(用于显示html,在下面的代码中称为htmlPanel)
  • 我想将 JFXPanel 与任何 JPanel 切换

我做了类似的事情:

if(htmlToFront){
    gridBagConstraints.gridy = i - 1;
}
else{
    gridBagConstraints.gridy = 8;
}
jPanel1.add(htmlPanel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
//some other gridbag initializations
if(htmlToFront){
    gridBagConstraints.gridy = 8;
}
else{
    gridBagConstraints.gridy = i - 1;
}
jPanel1.add(jPanel, gridBagConstraints); 

切换正确完成 - JFXPanel 和 JPanel 位于正确的位置。但切换了几次后,场景就不再显示了。我的意思是,经过一两次切换后一切正常,我的 htmlPanel 内的 html 代码显示正确。但是在另外几次切换之后(我在进行切换之前等待了几秒钟),html 代码不再显示。

我做了一些测试,似乎 Platform.runLater 在出现此问题后从未调用任何 Runnable 对象。就像它被困在另一项工作上,我猜这与 html 代码未显示有关(或者可能平台已关闭,但我不知道如何检查它或为什么它会关闭)。

为什么会发生这种情况?也许我切换的方式不好?在切换过程中,有几毫秒 JFXPanel 无法显示,这是否存在问题?

一个更普遍的问题是为什么 Platform.runLater 不执行任何操作?

最佳答案

当您切换 Pane 时,会在一小段时间内没有 FX 节点属于所显示的场景图的一部分。我的猜测是,如果 FX 应用程序线程此时恰好处理场景脉冲,它会检测到没有 Activity 场景图并退出。

您可以通过调用来防止此行为

Platform.setImplicitExit(false);

创建JFXPanel后立即进行。

关于JavaFX 平台似乎已死(关闭/崩溃),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542954/

相关文章:

java - 无法运行简单的JavaFX程序

java - 如何在jsp页面中根据名字显示名字

java - 使 JComboBox 表现得像一个带有分割的菜单

java - 使用 TableView.CONSTRAINED_RESIZE_POLICY 时 TableView header 宽度错误

java - 设置 webapprootkey no-web.xml

java - Java 字节码中的奇怪模式

java - java中的线程不工作

java - BorderLayout 顶部的 JMenuBar

java - 如何在javafx中为鼠标单击事件调用相同的方法并输入按键

java - javaFX TableView 中的错误