Как netbeans останавливает бег? - PullRequest
4 голосов
/ 28 июля 2011

Я программирую на Java в Linux, используя Netbeans 7, и поскольку моя программа (иногда) не может выйти (возможно, не в этот период), я создаю поток для обработки завершения

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

Но когдаЯ запускаю код с NetBeans (F6) и останавливаю его с помощью кнопки «STOP», поток не создается;но если я запускаю программу через терминал и посылаю CTRL-c, создается поток.
Вопрос: какой тип сигнала запускает netbeans для завершения программы?
Или (лучше): как я могу обработатьостановка NetBeans, так что поток создается, если я заставляю остановить программу?
Или есть способ изменить, как работает останов?

Спасибо!

1 Ответ

3 голосов
/ 31 июля 2011

Вы работаете в 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
    

Или в одну строку:

    $ ps x | grep HookTest | grep java | awk '{print $1}' | xargs kill -15
...