1

まだ実行中の SWT アプリケーションがあり、ユーザーが OS X でシステムのシャットダウンをトリガーすると、ハングします。アプリケーション メニューからアプリケーションを閉じると、正常に動作します。

インスタンスにSWT.Closeリスナーを登録しようとしました:Display

display.addListener(SWT.Close, new Listener() {
    @Override
    public void handleEvent(Event event) {
        if (!handleExitRequest()) {
            event.doit = false;
            event.type = SWT.None;
        }
    }
});

これはハングを魔法のように解決しますが、残念ながら、終了時に呼び出されるとは限りません。:(

4

2 に答える 2

1

メインスレッドのシャットダウンフックをリッスンしている結果はまちまちです。動作する場合と動作しない場合があります。過去に私のために働いたことは、別のスレッドを作成し、それにシャットダウンフックを登録することです。

public class MyGuiApplication
{
    public static void main( String[] args )
    {
        Runtime runtime = Runtime.getRuntime();
        Thread shutdownThread = new Thread(new Runnable()
        {
          @Override
          public void run()
          {
            // Put graceful shutdown code of the main application/thread here.
          }
        });

        runtime.addShutdownHook( shutdownThread );

        startMyApp();
    }
}

うまくいけば、それはあなたのために働くかもしれません。

于 2013-02-05T15:35:08.903 に答える
0

このクラスとこのクラスを見てください。

Application クラスを使用すると、Java アプリケーションをネイティブの OS X 環境と統合できます。... ユーザーがアプリケーションの変更を保存していない場合、シャットダウン/ログアウトをキャンセルします。

次の質問もご覧ください。

アプリケーションがエージェントの場合、Mac OS X でシャットダウンをキャンセルする方法は?

于 2013-02-05T21:25:37.003 に答える