在Java控制台程式中,特別是多線程的Java控制台程式中,中途中斷程式可能產生不可預料的結果,比如檔案描述符沒有關閉,造成檔案格式的破壞,或者 遠端連線沒有關閉,造成遠程伺服器資源的浪費,等等。所以在程式中添加Ctrl+C處理機制很有必要,下面根據一個例子作一下介紹如何處理:
在 程式中調用RunRuntime.getRuntime().addShutdownHook(Thread handler)就可以添加一個程式退出處理線程handler,一旦發生程式退出,線程handler開始運行。這樣就可以在handler的run函 數中進行資源的釋放,檔案描述符的關閉等操作。下面是一個簡單的例子:
/** * This Class introduced how to handle Ctrl+C in your program <BR> * You can close file descriptor, close remote connection , release memory and * so on when Ctrl C happens. * * @author Ahui Wang * */public class CtrlC implements Runnable { private boolean bExit = false; private class ExitHandler extends Thread { public ExitHandler() { super("Exit Handler"); } public void run() { System.out.println("Set exit"); bExit = true; } } public CtrlC() { Runtime.getRuntime().addShutdownHook(new ExitHandler()); } public void run() { while (!bExit) { // Do some thing } System.out.println("Exit OK"); } public static void main(String[] args) throws InterruptedException { CtrlC ctrlc = new CtrlC(); Thread t = new Thread(ctrlc); t.setName("Ctrl C Thread"); t.run(); t.join(); }}
上面程式中有一個main線程,一個主線程,一個Ctrl+C處理線程,當發生Ctrl+C時,處理線程設定退出標誌,主線程判斷到退出標誌後自動結束。
每個java應用程式都有一個Runtime類的執行個體。程式可以同過這個執行個體與運行環境互動。應用程式只能通過Runtime.getRuntime()來獲得Runtime執行個體,不能自己建立。
################
異常處理類需要繼承Thread,但是外面的類(CtrlC)不需要。