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

标签 java keyboard jline

我刚开始弄乱 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/

相关文章:

javascript - 使用纯 css3 的键盘导航

java - 为什么我的命令提示符显示未输入任何字符?

带有自己提示符的 Java 命令行应用程序

java - 如何在 spring security/thymeleaf 中自动生成 csrf token 而不使用 @EnableWebMvcSecurity

java - 使用 SuperCSV CSVBeanReader 时在字符串上使用什么单元处理器

Java:在map.entry上实现Treemap方法,可能吗?

apache-flex - 找出按下的字符

java - @Transactional(isolation = Isolation.SERIALIZABLE) 重试机制

haskell - 哪个 KeyBoard/KeyBoard Layout 最适合 Haskell 编程? haskell 是否将所有数学符号都作为函数?

java - 如何用 JLine 编写等效的 KeyListener?