2017-06-26 6 views
0

Mac OS SierraのJavaFXでJXBrowser Chromiumブラウザエンジンを試しています。 browser.goBack()またはbrowser.goForward()メソッドを呼び出した後、URLが完全にロードされるまで待ってナビゲーション履歴を確認したいと思います。下記のシンプルなアプリケーションはJVMをクラッシュさせますが、Java(Swing)でも同じコードが正常に動作します。 Javaスイングアプリで同じ呼び出しが問題なく動作します。なぜ誰にも分かりませんか?JxBrowserを使用するJavaFXでは、invokeAndWaitFinishLoadingMainFrame()メソッドがJVMをクラッシュさせます。

public class JavaFXSample extends Application { 
@Override 
public void init() throws Exception { 
    // On Mac OS X Chromium engine must be initialized in non-UI thread. 
    if (Environment.isMac()) { 
     BrowserCore.initialize(); 
    } 
} 

@Override 
public void start(final Stage primaryStage) { 
    Browser browser = new Browser(); 
    BrowserView view = new BrowserView(browser); 

    Scene scene = new Scene(new BorderPane(view), 700, 500); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

    primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() { 
     @Override 
     public void handle(WindowEvent t) { 
      Platform.exit(); 
      System.exit(0); 
     } 
    }); 

    Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser> 
    () { 
     @Override 
     public void invoke(Browser browser) { 
      browser.loadURL("http://www.google.com"); 
     } 
    }); 
} 

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

答えて

0

ブラウザインスタンスをヘビーウェイトモードで作成するため、デッドロックに遭遇したようです。軽量レンダリングモードを有効にし、別のネイティブプロセスでChromiumエンジンを実行してUIスレッドのデッドロックを回避する "jxbrowser.ipc.external = true" VMパラメータを使用して、この問題を解決できます。

関連する問題