2014-11-04 53 views
1

我想用WebView實例化許多JFrames,它將工作,只要打開第一個WebView後,至少有一個WebView仍然活着,並且JFrame(以及其他一切)不處理。WebView不能再工作後關閉

經過一番檢查後,似乎在關閉所有WebView JFrame之後,Platform.runLater()不再運行在帶有WebViewPanel的JFrame的下一個實例上。

以下是簡化代碼:

public class WebViewPanel{ 
    private JFXPanel jfxPanel; 
    private WebView view; 
    private WebEngine webEngine; 
    private JPanel panel; 
    public WebViewPanel(JPanel panel){ 
     this.panel = panel; 
     panel.setVisible(true); 
     createScene(); 

    } 
    private void createScene(){ 
     Platform.runLater(new Runnable(){ 
      @Override 
      public void run(){ //Runnable no longer runs after all JFrames with WebViewPanels are closed 
       jfxPanel = new JFXPanel(); 
       view = new WebView(); 
       webEngine = view.getEngine(); 
       jfxPanel.setScene(new Scene(view)); 
       panel.add(jfxPanel); 
       jfxPanel.setVisible(true); 
      } 
     }); 
    } 
} 

所以,我必須做什麼來解決這個問題呢?

+0

我認爲你應該使用[JFXPanel](http://docs.oracle.com/javase/8/javafx/api/javafx/embed/swing/JFXPanel.html)。也許它在那裏,你只是簡化了你的代碼示例。 [MVCE](http://stackoverflow.com/help/mcve)可能會有所幫助。 – jewelsea 2014-11-05 00:29:17

回答

0

發生這種情況是因爲如果未明確設置,平臺會自行退出。

這裏就是你需要做的只是後

Platform.runLater(new Runnable(){ // ..code 

在第一行

因此新的代碼將被添加Platform.setImplicitExit(false);什麼 -

private void createScene(){ 

    Platform.runLater(new Runnable(){ 
    Platform.setImplicitExit(false); 
     @Override 
     public void run(){ 
      jfxPanel = new JFXPanel(); 
      view = new WebView(); 
      webEngine = view.getEngine(); 
      jfxPanel.setScene(new Scene(view)); 
      panel.add(jfxPanel); 
      jfxPanel.setVisible(true); 
     } 
    }); 
} 

僅供參考,如果你想不止一次顯示面板,不需要調用createScene()將JFXPanel添加到JFrame(首選面板也可以正常工作)並帶有靜態引用。配置框架關閉它,當你需要顯示這個簡單地設置相同的框架setVisibale(true);。每次調用這個框架,你也可以檢查這個框架的靜態引用是否指向null(表示第一次調用),然後調用createscene(),否則只是將靜態引用設置爲可見。