Detecting when a Java application closes

假如想象 提交于 2019-11-27 08:37:54

问题


I am trying to detect when the Java application is about to close so I can perform methods to release resources, I have done it in C# as follows:

//Intercept when the application closes
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //Reclaim resources from MIDI usage
            if (MIDIControl.CleanUp())
            {
                Logger.Add("Closed resources successfully on Form Close \n");
            }
            else
            {
                Logger.Add("Failed to close all resources on Form Close.");
            }
        }

I've tried to perform the same technique in the Java version yet it doesn't seem to work, I've tried debugging and it doesn't suspend on the breakpoint placed on the method name:

//Intercept when the application closes
        public void windowClosing(WindowEvent we)
        {
            //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);
        }

Am I waiting for the wrong event? How would I go about performing the appropiate method in the same way as the C# version.

Thanks for your time.


回答1:


Have you registered the class containing windowClosing() method as via addWindowListener()?

Besides that using a window for determining the application state is not a good style. Java explicitly allows you to hook the shutdown process:

Runtime.getRuntime().addShutdownHook(new Thread() {

    @Override
    public void run() {
        // place your code here
    }

});


来源:https://stackoverflow.com/questions/5731893/detecting-when-a-java-application-closes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!