2011-05-14 30 views
2

我有一个控制台Java应用程序,它在后台执行一些任务。如果在键盘缓冲区中存在某些东西,并且我知道所有控制台读取和测试都被阻止,Java不支持用于测试的控制台kbhit()。单独的线程是一个很好的策略,通过按键终止后台任务应用程序?

我要做的是用console.readLine()之类的东西启动一个后台线程,然后在完成这个阻塞调用之后放置一些终止标志。应用程序后台任务将检查此标志并决定是否需要终止。

顺便说一句,我的应用程序正在写入控制台在其工作过程中(通过logback等登录),但从来没有读过它。

这样的策略很好吗?

+0

给我,奉献一个线程来'到Console.ReadLine()'听起来是个不错的方法(按回车键后)......有你测试过了吗?唯一需要担心的是在旗帜上进行同步。 – mre 2011-05-15 00:42:23

+0

@sthupahsmaht哪个标志?控制台已经在Java – 2011-05-15 09:19:02

+0

中同步了,我引用了“我要做的就是启动一个类似于console.readLine()的后台线程,然后在这个阻塞调用完成后放置一些终止标志。检查这个标志并决定他们是否需要终止。“ – mre 2011-05-15 14:28:43

回答

1

您可以使用System.in.available()>0但只有充分缓冲线从控制台

+0

如果按键被单独输入会怎么样?将available()返回大于0的东西吗? – 2011-05-15 09:18:23

+0

是的System.in也缓冲linebreak,所以只按回车将把可用1(或2在Windows中)) – 2011-05-15 11:52:52

相关问题