题
我刚刚开始使用 JLine 来解析控制台模式下的字符输入。它似乎运作良好,但我想知道:
JLine中是否存在非阻塞方式以确定字符是否可用? (例如 kbhit()
< Windows中的/ a>。)
我想我总是可以将键盘输入包装在自己的线程中,然后将线程安全队列中的键盘字符提供给主线程,但这似乎是不必要的。
编辑:这是逐字符解析。我不打算使用GUI。在控制台模式下,Java中通常的InputStream I / O要求您首先按Enter键(例如,它只是缓冲输入)。请不要告诉我在Java中无法在控制台模式下输入逐个字符的输入;事实并非如此。 JLine使用具有平台相关实现的便携式接口来实现它。
编辑更新:我能够组合一个帮助程序类来在工作线程中执行阻塞I / O(对于每个字符的I / O使用JLine,警告:你必须自己解析Ctrl-C!)&amp;然后通过同步队列与isempty()例程进行通信。对于我现在正在做的事情,这很好,但我真的想知道在未来这样做的好方法。
解决方案
你似乎走在了正确的轨道上。
我认为“正确”这样做的方法是将所有阻塞I / O注入非阻塞队列的工作线程。 Hava了解 ConcurrentLinkedQueue 来自 java.util。并发。
其他提示
如果没有本机库,则无法使用控制台获取非阻塞输入。
你必须写一个Swing应用程序并写一个 KeyListener
阅读本教程: http://java.sun.com/docs/books/教程/ uiswing /活动/ keylistener.html
不隶属于 StackOverflow