我刚开始弄乱 JLine在控制台模式下解析字符输入。它似乎运作良好,但我想知道:
在 JLine 中是否有一种非阻塞的方式来查明字符是否可用? (即像 Windows 中的 kbhit()
。)
我想我总是可以将键盘输入包装在它自己的线程中,然后将线程安全队列中的键盘字符提供给主线程,但这似乎是不必要的。
编辑:这是逐字符解析。我不会使用 GUI。在控制台模式下,Java 中通常的 InputStream I/O 要求您先按下 Enter 键(例如,它只是缓冲输入)。请不要告诉我在控制台模式下逐字符输入在 Java 中是不可能的;它不是。 JLine 使用具有平台相关实现的可移植接口(interface)来实现。
编辑更新:我能够组合一个辅助类来在工作线程中执行阻塞 I/O(将 JLine 用于每个字符的 I/O,警告:你必须自己解析 Ctrl-C!)& 然后通过同步队列与 isempty() 例程进行通信。对于我现在正在做的事情,这很好,但我真的很想知道在未来做这件事的好方法。
最佳答案
您似乎走在正确的轨道上。
我认为执行此操作的“正确”方法是使用工作线程将所有阻塞 I/O 放入非阻塞队列。哈瓦看看ConcurrentLinkedQueue来自 java.util.concurrent .
关于控制台应用程序中的 Java 键盘输入解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/414237/