Dock から非表示にする必要がある Java アプリケーションがあり、中断できるようにする必要もあります。これは私がシャットダウンを処理する方法です:
import com.apple.eawt.AppEvent.QuitEvent;
import com.apple.eawt.QuitHandler;
import com.apple.eawt.QuitResponse;
import com.apple.eawt.Application;
public class MacOSXCustomizer {
public void init() {
Application application = Application.getApplication();
application.setQuitHandler(new QuitHandler() {
public void handleQuitRequestWith(QuitEvent qe, QuitResponse qr) {
if(Main.prepareForExit()) {
qr.performQuit();
} else {
qr.cancelQuit();
}
}
});
}
}
私は独自の Java ランチャーを使用しており、アプリケーション バンドルと独自の Java ランチャー バイナリを使用しています。LSUIElement を YES に設定して Dock アイコンの問題を解決しましたが、シャットダウン フックが機能しなくなりました。私のメソッドはシャットダウン中に呼び出されますが (ログに記録できます)、qr.cancelQuit() が呼び出されてもアプリケーションは終了します。システムが応答を待っていないようです。いくつかの操作 (2 秒間) が実行されていても、完了していません。データ損失の原因となります。
LSUIElement を NO に戻そうとすると、qr.cancelQuit() が呼び出されるとシステムがシャットダウンをキャンセルします。他の変更は行われませんでした。
また、メソッドを 1 つだけ実装する単純な Cocoa アプリケーションを作成しようとしました。
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
return NSTerminateCancel;
}
「アプリケーションのShutdownTestがログアウトをキャンセルしました」というダイアログが表示されます。とにかくユーザーセッションはログアウトされます。
私の質問は、Dock とメニュー バーにアイコンを表示せず、シャットダウン シーケンスをキャンセル/中断できるようにするにはどうすればよいですか?
編集: Javaアプリケーションかどうかは関係ありません。ネイティブ アプリケーションの動作は同じです。