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

时间:2016-07-23 14:39:26

标签: java swing javafx

我的用例如下:

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

我做的事情如下:

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代码没有显示的事实有关(或者平台是关闭的,但我不知道如何检查这个或为什么它会关闭)。 / p>

为什么会这样?也许我做转换的方式不好?是否存在这样的问题:在切换期间的几毫秒内JFXPanel无法显示?

更普遍的问题是Platform.runLater什么都不做?

1 个答案:

答案 0 :(得分:1)

切换窗格时,没有FX节点是显示的场景图的一部分时,会有一小段时间。我的猜测是,如果FX应用程序线程此时正在处理场景脉冲,它会检测到没有活动的场景图并退出。

您可以通过调用

来阻止此行为
Platform.setImplicitExit(false);
创建JFXPanel后立即