Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
478 views
in Technique[技术] by (71.8m points)

events - Detecting when a Java application closes

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 
");
            }
            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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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
    }

});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.8k users

...