4

我正在使用 Netbeans 7 在 Linux 中使用 Java 进行编程,并且由于我的程序(有时)无法退出(可能不在这个 eo​​n 中)我创建了一个线程来处理关机

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
    

或者在一行中:

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