【问题标题】:Java keyboard input parsing in a console app控制台应用程序中的 Java 键盘输入解析
【发布时间】:2010-09-29 16:16:57
【问题描述】:

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

在 JLine 中是否有一种非阻塞方式来确定字符是否可用? (即像 Windows 中的 kbhit()。)

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

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

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

【问题讨论】:

  • 你能发布一个答案的片段吗?看起来很有趣。

标签: java keyboard jline


【解决方案1】:

你似乎在正确的轨道上。

我认为“正确”的做法是使用工作线程将所有阻塞 I/O 倒入非阻塞队列。看看ConcurrentLinkedQueue 来自java.util.concurrent。

【讨论】:

    【解决方案2】:

    如果没有原生库,您无法使用控制台获取非阻塞输入。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-21
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多