java 捕捉退出程序事件


在結構單純的程序中,要預期結束點相當簡單,但在多執行緒或其他複雜結構就很難判斷結束點,這種情況就能使用 Runtime.getRuntime().addShutdownHook() 方法幫助捕捉結束點,在結束前執行其他功能,通常你可以在 public static void main(String[] args){}的最後呼叫該方法,如

Simer.java
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;


public class Simer //extends HttpServlet
{
    
    public Simer(){
        
    }
    
        //使用這個方法捕捉結束點,run方法中放結束前要執行的動作
    private static void doShutDownBefore(){
        Runtime.getRuntime().addShutdownHook(new Thread(){
            public void run(){
                
                //do something before end
    System.out.println("CLOSE!!CLOSE!!CLOSE!!CLOSE!!CLOSE!!CLOSE!!CLOSE!!");
            }
        });
    }
    
    //main
    public static void main(String[] args){
        
        System.out.println("args.length: "+args.length);
        
        for(String s : args){
            System.out.println("args:"+s);
        }
        
        getSupplyProperty();
        
        Simer sim = new Simer();
        
        CommonTools cts = new CommonTools();
        cts.start();
        
                //通常放在 main 方法的最後
                doShutDownBefore();
}
}

使用這個方法好處是就算用強制結束的方法來關閉程序,也能偵測到, 視窗程序(swing,awt) 也行