G'day所有,
我有一个控制台项目,用户按下键盘方向键(非数字小键盘)来移动化身.我编码很难检查这些键的按键.在Pascal中,使用"readkey"和代码很容易,例如,#80用于向下按键.但是,我很难理解如何在Java中实现相同的功能,尽管我认为我理解使用System.in和BufferedInputStream.
任何人都可以帮我吗?非常感谢您的想法或提示.
我刚开始搞乱JLine来解析控制台模式下的字符输入.它似乎运作良好,但我想知道:
在JLine中是否存在非阻塞方式以查明字符是否可用?(就像kbhit()在Windows中一样.)
我想我总是可以将键盘输入包装在自己的线程中,然后将线程安全队列中的键盘字符提供给主线程,但这似乎是不必要的.
编辑:这是逐字符解析.我不打算使用GUI.在控制台模式下,Java中通常的InputStream I/O要求您首先按Enter键(例如,它只是缓冲输入).请不要告诉我在Java中无法在控制台模式下输入逐个字符的输入; 事实并非如此.JLine使用具有平台相关实现的可移植接口来实现它.
编辑更新:我能够组合一个帮助程序类来在工作线程中执行阻塞I/O(对于每个字符的I/O使用JLine,警告:您必须自己解析Ctrl-C!)然后进行通信通过带有isempty()例程的同步队列.对于我现在正在做的事情,这很好,但我真的想知道未来的好方法.
我有java应用程序,它支持多个工作流程.使用从命令行传递给它的参数选择工作流.在其中一个工作流应用程序需要运行无限时间.我使用以下代码实现了相同的目标
switch (args[0]) {
case "-runForever":
// Some Computation
Thread.sleep(Long.MAX_VALUE);
break;
case "otherCase:
//dosomething
break;
}
Run Code Online (Sandbox Code Playgroud)
这是实现所需功能的好方法吗?