2012-07-18 53 views
3

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

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

它使用命令行工具阶效果很好。当我点击ctrl-c时,会打印“开始”和“关闭”消息。但是,当我在Eclipse IDE中运行它并且点击控制台窗口的终止按钮时,不会打印“关闭”消息。它只是静静地终止。我已验证在关闭挂钩中的所有其他内容在终止时正常运行。只有println不起作用。

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

回答

1

尝试登录关闭消息记录到文件,而不是shutDownHook。在程序真正终止之前,Eclipse可能会关闭标准输出管道的末端。

+0

谢谢你的回答,Kim。这是一个可能的解决方法,它实际上可行,尽管我仍然试图找到一种方法来使控制台工作。如果事实证明在这一点上没有其他选择,我会尽快将您的答案标记为已接受。 ;) – 2012-07-19 04:53:31

1

你可以尝试这斯卡拉提供

sys addShutdownHook(println("shutdown")) 
+0

感谢提醒,FUD,但它没有解决问题。 :) – 2012-07-19 04:48:43

+0

由于https://bugs.eclipse.org/bugs/show_bug.cgi?id=38016,截至2014年9月,它不适用于Eclipse。你必须自己发送SIGTERM到java进程 – Hamy 2014-09-22 13:18:04

4

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

这个bug报告解析为不会解决

我意识到,它的一个老的bug等等,也许从那以后事情发生了变化。

+0

感谢您的链接,钱宁。 (+1票:)这是很好的了解问题的历史,也不仅仅是我有这个问题。事情现在似乎有所改变。正如我所说的,关闭钩子现在可以正确调用。只有println在关机时不起作用。 – 2012-07-19 04:47:09

+0

你也可以尝试冲洗System.out – 2012-07-19 07:09:53

+0

仅供参考这个问题截至2014年9月还没有修复,它也使得scala的sys sys addShutdownHook不起作用。从外部向SIG进程发送SIGTERM Eclipse启动会使所有内容按预期工作(包括控制台日志) – Hamy 2014-09-22 13:17:17

相关问题