2

JFrame に Web ブラウザがありますが、アプリケーションの終了時に Web ブラウザを破棄できないと思います。

これを達成しようとする私のコードは次のとおりです。

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        webBrowserEngine.getLoadWorker().cancel();
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                Platform.exit();
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        getMainFrame().dispose(); // Is set to dispose on close
                        // SwingUtilities.invokeLater(new Runnable() {
                            // @Override
                            // public void run() {
                                // System.exit(0);
                            // }
                        // });
                    }
                });
            }
        });
    }
});

ウィンドウは閉じますが、Java プロセスはそのままで、次の行は常に false を返します。

webBrowserEngine.getLoadWorker().cancel();
4

1 に答える 1

1
Platform.exit();

FXApplicationThread を強制的に終了させます。それに関連するすべてが最終的に確定されます。これをテストするには、 WebEngine クラスを拡張および上書きして、 finalize() トリガーで別の処理を行います。

また、WebEngine 自体内の URL 処理ルーチンに関連するセルフディスポーザーの実装も存在します。

さらに、WebEngine はリソース処理のためにいくつかの URLLoader を処理します。これらは DLL にあるため、ワイプするのは少し奇妙です...とてもネイティブです。

このリードメトをいじると、論理的な回避策が必要な一連の MemoryAccessViolation 例外が発生しました。

于 2015-07-29T12:29:02.790 に答える