8

インメモリデータベースへの接続を使用するRCPアプリケーションがあります。Windowsをシャットダウンすると、データベースへの接続を閉じる機会を与えずにアプリケーションが強制終了されるという状況が1つあります。

少し調べてみたところ、このイベントを検出してJavaアプリケーションでクリーンアップを行うには、シャットダウンフックを追加するのが最善の方法のようです。ただし、RCPアプリケーションがあり、複数のエディターが開いている可能性がある場合、これを処理する正しい方法は何ですか?

4

3 に答える 3

3

WorkbenchAdvisor を拡張するクラスの preShutdown メソッドをオーバーライドする必要があります。シャットダウン プロセスを停止するには false を返し、続行するには true を返します。

于 2009-03-22T19:53:59.967 に答える
2

RCPアプリケーションを実際に起動する前に、IApplication実装者のstart()メソッドから実行する次のコードを試しました。

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        if (PlatformUI.isWorkbenchRunning()) {
            PlatformUI.getWorkbench().close();
        }
        logger.info("Shutdown request received");
        cleanup();
    }
});

cleanup()がデータベースへの接続を閉じる場所。Closeは、開いているドキュメントがあるかどうかを保存するようにユーザーに要求する必要があります。

于 2009-02-05T14:00:22.113 に答える