トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2004-12-8

Javaで\C-c

Javaで書いたプログラムはJavVMがC-cで終了してしまう.
なので,トランザクション処理のようなプログラムを書いている場合など,
C-cを押されたタイミングで勝手に落ちてしまわれると困る場合には,
java.lang.Runtime.addShutdownHook(Thread)を使う.
HookTestがThreadを継承したクラスだとすると,

Runtime.getRuntime().addShutdownHook(new HookTest());

こんな感じでaddしていけばいいのだが,このShutdownHookちょっと使いづらい.
デッドロックを防ぐためなのか,
Shutdown進行中には,次のフックをaddSHutdownHookで登録することができない.
また,このHook状態を破棄することができないので,
JavaVMは終了状態に移行すると,元の状態に戻れないということになる.
従って,例えば,C-cが入力されたときに
「終了します(Y/N)」みたいな対話式のプログラムは作れない...
... ...
...と思う.もしできる方法があるなら教えて欲し〜です♪
でも自由にシグナル扱おうと思ったら,やっぱりJNIでsingal関数かな〜
ただ,ちょっとやってみたらJVMのスレッドの関係でちょっと面倒な感じでした.