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

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

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

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

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

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

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

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

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

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

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