在JavaFX中,使用JxBrowser invokeAndWaitFinishLoadingMainFrame()方法使JVM崩溃

在JavaFX中,使用JxBrowser invokeAndWaitFinishLoadingMainFrame()方法使JVM崩溃,javafx,jxbrowser,Javafx,Jxbrowser,我正在Mac OS上用JavaFX测试JXBrowser Chromium浏览器引擎。我想在调用browser.goBack()或browser.goForward()方法后等待URL完全加载,以便检查导航历史记录。下面这个简单的应用程序使JVM崩溃,但同样的代码在Java(Swing)中运行良好。Java swing应用程序中的相同调用可以正常工作。有人知道为什么吗 public class JavaFXSample extends Application { @Override public

我正在Mac OS上用JavaFX测试JXBrowser Chromium浏览器引擎。我想在调用browser.goBack()或browser.goForward()方法后等待URL完全加载,以便检查导航历史记录。下面这个简单的应用程序使JVM崩溃,但同样的代码在Java(Swing)中运行良好。Java swing应用程序中的相同调用可以正常工作。有人知道为什么吗

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);
}
}
public类JavaFXSample扩展应用程序{
@凌驾
public void init()引发异常{
//在Mac OS X上,Chromium引擎必须在非UI线程中初始化。
if(Environment.isMac()){
初始化();
}
}
@凌驾
公共作废开始(最终阶段初级阶段){
浏览器=新浏览器();
BrowserView视图=新建BrowserView(浏览器);
场景=新场景(新边框窗格(视图),700500);
初级阶段。场景(场景);
primaryStage.show();
setOnCloseRequest(新的EventHandler()){
@凌驾
公共无效句柄(WindowEvent t){
Platform.exit();
系统出口(0);
}
});
浏览器。invokeAndWaitFinishLoadingMainFrame(浏览器,新回调
() {
@凌驾
公共void调用(浏览器){
browser.loadURL(“http://www.google.com");
}
});
}
公共静态void main(字符串[]args){
发射(args);
}
}

看起来您遇到了死锁,因为您在重量级模式下创建了浏览器实例。您可以尝试使用“jxbrowser.ipc.external=true”VM参数来解决此问题,该参数启用轻量级渲染模式,并在单独的本机进程中运行Chromium引擎,以避免UI线程中出现死锁