我有一个需要对 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() 时系统取消关机。没有进行其他更改。
我还尝试创建仅实现一种方法的简单 Cocoa 应用程序:
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
return NSTerminateCancel;
}
它显示对话框“应用程序 ShutdownTest 取消注销”。但无论如何用户会话已注销。
我的问题是如何解决在 Dock 和菜单栏中没有图标并能够取消/中断关机序列的问题?
编辑:它是否是 Java 应用程序无关紧要。本机应用程序具有相同的行为。