Home About
Java

プログラム終了時に”ある処理”を絶対に実行したい(Java)

プログラム終了時に確実にある処理を実行したい、ということがあります。 (たとえば、編集中のドキュメントが未保存の場合、自動保存するとか)

GUIアプリケーションの場合は、JFrameにWindowListenerをセットして、windowClosing()を実装しておけばよいと思っていたのですが、それではうまくいきません。以下のような場合...

たとえば、コンソールからCtrl+Cで終了した場合や、Mac OS XではCtrl+Qで終了した場合、WindowListener#windowClosing()などが呼ばれないまま終了してしまいます。

そういう場合でもきちんと終了をハンドルして終了時の後始末処理を するには、以下のようにします。

Thread hook=new Thread(){
    public void run() {
        doSomethin();//終了処理
   }
};
Runtime.getRuntime().addShutdownHook(hook);