在调用System.exit(0)之后,应用程序继续运行 - Java

时间:2011-04-20 18:55:36

标签: java events netbeans shutdown-hook

我正在尝试在关闭之前清理应用程序中的资源,继上一个问题之后(Detecting When A Java Application Closes)我已经实现了以下代码,它完美地执行了清理操作。

//Intercept when the application closes
            Runtime.getRuntime().addShutdownHook(new Thread()
            {
                @Override
                public void run()
                {
                    //Reclaim resources from MIDI usage
                    if(_midiInstance.CleanUp())
                    {
                        Logger.Add("Closed resources successfully on ShutDown");
                    }
                    else
                    {
                        Logger.Add("Failed to close all resources on ShutDown");
                    }
                    System.exit(0);
                }
            });

虽然System.exit(0);在没有可见的GUI的情况下,应用程序继续运行,理解并处理了调用。我已经考虑过将System.exit(0)调用放在Thread之外但是它超出了范围,没有任何其他线程或流在运行。

挂钩到ShutDown事件以确保一切都关闭时,我还需要采取额外步骤吗?

感谢您的时间,我非常感谢。

2 个答案:

答案 0 :(得分:3)

在阅读完其他问题后,您的窗口似乎可能没有调用dispose()。如果是,那将解释您的问题的原因。

答案 1 :(得分:1)

你需要越过窗户关闭按钮:

            //overriding the windowClosing() method will allow the user to click the close button
    addWindowListener(
            new WindowAdapter()
    {
        public void windowClosing(WindowEvent e)
        {
            System.exit(0);
        }
    });

通过这样做,程序将关闭而不仅仅是变得不可见。