9

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

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

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

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

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

4

2 回答 2

4

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

我认为做到这一点的“正确”方法是一个工作线程,它将所有阻塞 I/O 倒入一个非阻塞队列中。看看java.util.concurrent 中ConcurrentLinkedQueue

于 2009-01-09T20:25:13.423 回答
3

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

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

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

于 2009-01-05T19:48:36.063 回答