2016-07-23 36 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);