拒绝OS X系统关闭

时间:2013-01-27 15:21:46

标签: java macos swt

我们有一个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;
        }
    }
});

这可以神奇地解决这个问题,但不幸的是,它在退出时不可靠。 :(

2 个答案:

答案 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)

请查看此class和此class

  

Application类允许您将Java应用程序与本机OS X环境集成。   ...   如果用户在应用程序中有未保存的更改,请取消关闭/注销。

您也可以查看以下问题:

How to cancel shutdown in Mac OS X when application is an agent?