我正在编写一个在循环中运行的服务器,并在Eclipse IDE的控制台窗口中按下SIGINT(ctrl-c)或终止按钮时终止。我希望它正常关闭打印终止日志。但问题是,在Eclipse IDE中按下terminate按钮触发关闭序列时,println似乎不起作用。请看下面的简单代码:
object Test extends App {
println("start")
Runtime.getRuntime().addShutdownHook(new Thread {
override def run = println("shutdown")
})
synchronized { wait }
}
它与命令行scala工具配合得很好。当我按下ctrl-c时,会打印“start”和“shutdown”两条消息。但是当我在Eclipse IDE中运行并点击控制台窗口的终止按钮时,不会打印“关闭”消息。它只是默默地终止。我已经验证了shutdown hook中的其他所有内容在终止时都能正常运行。它只是println不起作用。
对此有何想法?我需要打印出用于记录的终止消息 感谢您的帮助!
答案 0 :(得分:4)
关闭进程时,Eclipse不会运行关闭挂钩:https://bugs.eclipse.org/bugs/show_bug.cgi?id=38016
该错误报告已解决为无法修复
我意识到这是一个旧的错误,所以也许事情从那时起发生了变化。
答案 1 :(得分:1)
您可以尝试scala提供的shutDownHook
sys addShutdownHook(println("shutdown"))
答案 2 :(得分:1)
尝试将关闭消息记录到文件中。在程序真正终止之前,Eclipse可能会关闭stdout管道的末尾。