Scala println在IDE中终止时不起作用

时间:2012-07-18 18:53:19

标签: eclipse scala scala-ide

我正在编写一个在循环中运行的服务器,并在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不起作用。

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

3 个答案:

答案 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管道的末尾。