2016-07-23 37 views
0

我的使用情况如下:JavaFX平台似乎是死的(关闭/坠毁)

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

I D类似于:

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不做任何事情?

+0

您正在混合JavaFX和Swing的任何具体原因?仅使用一个可能会更简单。 无论如何 - 发布包含任何“Platform.runLater”或“SwingUtilities.invokeLater”的组件可能有助于查明问题...... – Itai

+0

我需要Swing才能使用vlcj播放电影。 vlcj只能在Canvas中工作(我需要播放多达8个电影 - > 8个包含画布的jpanel)。我需要使用FX,因为我需要显示HTML5代码以及正在播放的电影。我只为调试目的调用了Platform.runLater,以查看平台是否仍然运行。我通常不会调用它 - 如果没有我调用Platform.runLater或SwingUtilities.invokeLater,则停止显示html代码。 – Anakin001

+0

这也不是一个调整大小为0像素的问题,fxPanel和webView具有适当的大小... – Anakin001

回答

1

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

您可以在创建JFXPanel后立即阻止通过调用此行为

Platform.setImplicitExit(false);