3

我正在编写一个循环运行的服务器,并在 Eclipse IDE 的控制台窗口中按下 SIGINT(ctrl-c) 或终止按钮的情况下终止。我希望它优雅地关闭并打印出终止日志。但问题是 println 在通过按下 Eclipse IDE 中的终止按钮触发关闭序列时似乎不起作用。看下面的简单代码:

object Test extends App {
  println("start")
  Runtime.getRuntime().addShutdownHook(new Thread {
    override def run = println("shutdown")
  })
  synchronized { wait }
}

它适用于命令行 scala 工具。当我按 ctrl-c 时,会打印“开始”和“关闭”这两条消息。但是当我在 Eclipse IDE 中运行它并点击控制台窗口的终止按钮时,不会打印“关闭”消息。它只是默默地终止。我已经验证了关闭挂钩中的其他所有内容在终止时都可以正常运行。只有 println 不起作用。

对此有任何想法吗?我需要打印出用于记录的终止消息。
提前感谢您的帮助!

4

3 回答 3

4

关闭进程时,Eclipse 不会运行关闭挂钩:https ://bugs.eclipse.org/bugs/show_bug.cgi?id=38016

该错误报告已解决为不会修复

我意识到这是一个老错误,所以从那时起事情可能发生了变化。

于 2012-07-18T20:07:21.993 回答
1

你可以试试scala提供的shutDownHook

sys addShutdownHook(println("shutdown")) 
于 2012-07-18T19:03:33.647 回答
1

尝试将关闭消息记录到文件中。Eclipse 可能会在程序真正终止之前关闭其标准输出管道的末端。

于 2012-07-18T19:09:32.680 回答