Java键盘输入在控制台应用程序中解析

时间:2009-01-05 19:38:41

标签: java keyboard jline

我刚刚开始使用JLine来解析控制台模式下的字符输入。它似乎运作良好,但我想知道:

JLine中是否存在非阻塞方式以确定字符是否可用? (例如Windows中的kbhit()。)

我想我总是可以将键盘输入包装在自己的线程中,然后将线程安全队列中的键盘字符提供给主线程,但这似乎是不必要的。

编辑:这是逐字符解析。我不打算使用GUI。在控制台模式下,Java中通常的InputStream I / O要求您首先按Enter键(例如,它只是缓冲输入)。请不要告诉我在Java中无法在控制台模式下输入逐个字符的输入;事实并非如此。 JLine使用具有平台相关实现的便携式接口来实现它。

编辑更新:我能够组合一个帮助程序类来在工作线程中执行阻塞I / O(对于每个字符的I / O使用JLine,警告:你必须自己解析Ctrl-C!)&然后通过同步队列与isempty()例程进行通信。对于我现在正在做的事情,这很好,但我真的想知道在未来做这件事的好方法。

2 个答案:

答案 0 :(得分:4)

你似乎走在了正确的轨道上。

我认为执行此操作的“正确”方法是将所有阻塞I / O注入非阻塞队列的工作线程。 Hava从ConcurrentLinkedQueue查看java.util.concurrent

答案 1 :(得分:3)

如果没有本机库,则无法使用控制台获取非阻塞输入。

您必须编写一个Swing应用程序并编写KeyListener

阅读本教程: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html