3

現在、JxBrowser 6.2 の評価ライセンスをいじっています。

次のように BrowserView を作成しています。

Browser browser = new Browser(BrowserType.HEAVYWEIGHT);
BrowserView browser_view = new BrowserView(browser);

次のように BrowserView コンポーネントをアタッチしています。

stage.setScene(new Scene(browser_view));

ブラウザが LIGHTWEIGHT モードで動作するように構成されている場合、次を実行できます。

browser_view.getBrowser().dispose();
Platform.exit();

ただし、ブラウザーが HEAVYWEIGHT モードで動作するように構成されている場合、次の実行時にアプリケーションがハングします。

browser_view.getBrowser().dispose();

Dispose メッセージが書き込まれたことをログで確認できますが、JxBrowser Chromium プロセスがメッセージを受信/処理していないように見えます。

何か案は?

4

4 に答える 4

2

私の前に答えたように、これに対する解決策は、ステージが非表示になった(閉じられた)後にブラウザーを破棄することです。
良いアプローチは、これらのコマンドstop()を JavaFX アプリケーションのメソッドに配置することです。
そのため、どちらの方法でウィンドウを閉じても (閉じるボタンをクリックするか、プログラムで を呼び出してPlatform.exit())、ブラウザーは破棄されます (そして、アプリケーション全体が終了して終了します)。

そんな感じ:

@Override
public void stop() throws Exception {
    stage.hide();
    browser.dispose();
}
于 2016-04-22T12:09:36.547 に答える
1

参考までに、こちらのリンク(セクション: 9. ポップアップ ウィンドウ) で説明されている構成を使用しました。

Platform.runLater(() -> {
    browser.dispose();
});

Platform.runLater(() -> {
    stage.close();
});
于 2016-10-17T16:21:30.250 に答える
0

このコードを非同期で呼び出してみてください。多分それはただのデッドロックです:

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        browser_view.getBrowser().dispose();
        Platform.exit();
    }
});
于 2016-03-07T09:02:39.697 に答える