1

我正在尝试在应用程序关闭之前清理应用程序中的资源,继我之前的问题(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 事件以确保一切都关闭时,我需要采取额外的步骤吗?

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

4

2 回答 2

3

在阅读了您的其他问题之后,您似乎没有在您的窗口上调用dispose( ) 。如果属实,那将解释您的问题的原因。

于 2011-04-20T19:01:41.397 回答
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);
        }
    });

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

于 2011-04-20T19:17:27.550 回答