4

私は Netbeans 7 を使用して Linux で Java を使用してプログラミングしていますが、私のプログラムは (時々) 終了できませんでした (おそらくこの eon ではありません)。シャットダウンを処理するスレッドを作成します。

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

しかし、netbeans (F6) でコードを起動し、「STOP」ボタンで停止すると、スレッドは作成されません。しかし、端末からプログラムを実行して CTRL-c を送信すると、スレッドが作成されます。
問題は、プログラムを終了するために netbeans が起動するシグナルの種類はどれかということです。
または(より良い):プログラムを強制的に停止した場合にスレッドが作成されるように、netbeansの停止をどのように処理できますか?
または、ストップの動作を変更する方法はありますか?

ありがとうございました!

4

1 に答える 1

3

Linux を使用しているため、非常に簡単です。私はほとんどテストを書いていませんが、あなたと同じ動作を観察しています-ターミナルフックから実行されているcrtl + cは機能していますが、Netbeansで停止していません。以下にいくつかの回避策を示します。

  1. 私はGnomeを使用しており、システムモニターで実行中のプロセスを見つけて「プロセスの終了」を押すと、フックが機能しています。
  2. その他、より普遍的な方法:

    $ ps ax | grep Hook
    17144 ?        Sl     1:21 /usr/lib/jvm/java-6-sun/bin/java -Dfile.encoding=UTF-8 -classpath /home/isopov/NetBeansProjects/ShutdownHookTest/build/classes:/home/isopov/NetBeansProjects/ShutdownHookTest/src shutdownhooktest.ShutdownHookTest
    17176 pts/2    R+     0:00 grep --color=auto Hook
    $ kill -15 17144
    

または1行で:

    $ ps x | grep HookTest | grep java | awk '{print $1}' | xargs kill -15
于 2011-07-30T20:02:08.613 に答える