我们有一个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;
}
}
});
这可以神奇地解决这个问题,但不幸的是,它在退出时不可靠。 :(
答案 0 :(得分: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();
}
}
希望这对你有用。
答案 1 :(得分:0)
Application类允许您将Java应用程序与本机OS X环境集成。 ... 如果用户在应用程序中有未保存的更改,请取消关闭/注销。
您也可以查看以下问题:
How to cancel shutdown in Mac OS X when application is an agent?