Exit java applications properly (Java article)

We submitted our java tool Java Launcher to download.com and got following user opinion there:
 
Excellent utility one major flaw!
This program makes running Java class files a breeze; I love the windows executable option as well. You can also have custom icons. The only major flaw I found is with the windows .exe files. Once you run a program this way and close it, it keeps running in the background. This eats up memory and prevents you from moving the file etc. Otherwise a real nifty tool!

Joe
24-Jan-2005 05:50:02 PM

We appreciate his opinion,  but this flaw is caused by user's programming errors, not by Java Launcher.
That is, user's java applications do not exit from their running processes themselves properly.

We hope this short article can help for solving this kind programming problems.  

Exiting from Java running process is very easy, basically you need to do just two simple things:

  1. call java method System.exit(...) at application's quit point.
    For example, if your application is frame based, you can add listener WindowAdapter and and call System.exit(...) inside its method windowClosing(WindowEvent e).

    Note: you must call System.exit(...) otherwise your program is error involved. 
      
  2. Avoiding unexpected java exceptions to make sure the exit method can be called always.
    If you add System.exit(...) at right point, It does not mean that the method can be called always, because unexpected java exceptions may prevent the method from been called: this is strongly related to your programming skills.
      
  • Following is a simplest sample (JFrame based) which shows you how to call exit method
     
    import java.awt.event.*;
    import javax.swing.*;

    public class ExitApp extends JFrame
    {
       public ExitApp()
       {
          addWindowListener(new WindowAdapter()
          {
             public void windowClosing(WindowEvent e)
             {
               dispose();
               System.exit(0); //must call the method
             }
          });
       }

       public static void main(String[] sCommand)
       {
          ExitApp app=new ExitApp();
          app.setBounds(133,100,532,400);
          app.setVisible(true);
       }
    }

It is unbelievable that many java samples from authorized organizations do not call the exit method, in other words, all of those samples contain basic programming errors.

You may ask: "My applications do not call this method, but it still can exit properly, why?"

Your question is not correct because your applications don't exit properly except they are very simple: they never create any threads and interfaces (do nothing) - simpler than sample above.

If you use a shell interface (i.e. DOS window) to execute an application by java command java MyApplication, when you close the DOS window, your application is closed also. 

Please realize that the application is not terminated by itself, instead, it is terminated by the shell interface - the shell interface terminates the running process of your application - similar to operating system terminates applications' running process when you shut down your computer.

If you use javaw.exe to execute your applications as javaw MyApplication, you will know you are in trouble at once.

We offer you two advanced java tools 

  1. Java Launcher.
  2. SyncJEdit (a java IDE)

Hope you enjoy them

SyncEdit software