2017-08-28 28 views
1

我使用Tabpane多重瀏覽器;當我關閉一個標籤,我不能處置的主要IPC:JxBrowser不能在JavaFX中配置

public class JxbrowserDemo extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     setLevel(Level.ALL); 
     TabPane tabPane = new TabPane(); 
     tabPane.getTabs().add(createBrowserTab()); 
     tabPane.getTabs().add(createBrowserTab()); 
     StackPane pane = new StackPane(); 
     pane.getChildren().add(tabPane); 
     Scene scene = new Scene(pane, 500, 400); 
     primaryStage.setTitle("JxBrowser: JavaFX - Hello World"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public Tab createBrowserTab() { 
     Tab tab = new Tab("baidu"); 
     Browser browser = new Browser(); 
     BrowserView browserView = new BrowserView(browser); 

     tab.setOnClosed(new EventHandler<Event>() { 
      @Override 
      public void handle(Event event) { 
       //last tag close throw exception 
       // 
       browser.dispose(); 
      } 
     }); 

     tab.setContent(browserView); 
     browser.loadURL("www.google.com"); 
     //tabPane.getTabs().add(tab); 
     //browserArrayList.add(browser); 
     return tab; 
    } 

    @Override 
    public void stop() throws Exception { 
     //dispose here Success 
     /*browserArrayList.forEach(t->{ 
      t.dispose(); 
     });*/ 
     super.stop(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

登錄:

02:42:22 信息: Shutting down event queue... 
02:42:22 信息: Shutting down event queue... [DONE] 
02:42:22 信息: Shutting down event queue... 
02:42:22 信息: Shutting down event queue... [DONE] 
02:42:22 信息: Channel has been disconnected: SocketChannel{cid=1, bid=1, type=Render} 
02:42:22 信息: Channel is disconnected: SocketChannel{cid=1, bid=1, type=Render} 
02:42:22 信息: Shutting down event queue... 
02:42:22 信息: Shutting down event queue... [DONE] 
02:42:22 信息: Shutting down event queue... 
02:42:22 信息: Shutting down event queue... [DONE] 
02:42:22 信息: IPC connection has been closed. Connection ID: 466160688 
02:42:22 信息: Pending IPC connections: 2 
02:42:22 信息: Channel has been disconnected: SocketChannel{cid=1, bid=1, type=Browser} 
02:42:22 信息: Channel is disconnected: SocketChannel{cid=1, bid=1, type=Browser} 
02:42:22 信息: Stopping IPC... 
02:42:22 信息: Stopping main channel... 
02:42:22 信息: IPC connection has been closed. Connection ID: 466160864 
02:42:22 信息: Pending IPC connections: 1 
02:42:22 詳細: WRITE: ShutdownMessage{type=Shutdown, uid=175, SocketInfo{cid=0, bid=-1, channelType=Main 

掛斷這裏。

約五分鐘後,它拋出異常:

02:42:22 詳細: WRITE: ShutdownMessage{type=Shutdown, uid=175, SocketInfo{cid=0, bid=-1, channelType=Main} 
Exception in thread "JavaFX Application Thread" com.teamdev.jxbrowser.chromium.internal.ipc.IPCException: Failed to execute shutdown post message. 
02:44:22 信息: Shutting down event queue... 
02:44:22 信息: Shutting down event queue... [DONE] 
02:44:22 信息: Shutting down event queue... 
02:44:22 信息: Shutting down event queue... [DONE] 
02:44:22 信息: Channel has been disconnected: SocketChannel{cid=0, bid=-1, type=Main} 
02:44:22 信息: IPC connection has been closed. Connection ID: 466161040 
02:44:22 信息: Pending IPC connections: 0 
02:44:22 信息: Chromium process exit code 0 

回答

1

嘗試在非JavaFX應用程序線程配置瀏覽器實例:

 tab.setOnClosed(new EventHandler<Event>() { 
     @Override 
     public void handle(Event event) { 
      //last tag close throw exception 
      // 
      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        browser.dispose(); 
       } 
      }).start(); 
     } 
    });