在結構單純的程序中,要預期結束點相當簡單,但在多執行緒或其他複雜結構就很難判斷結束點,這種情況就能使用 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) 也行