在Java中检测并操作键盘方向键

G’day全部,

我有一个控制台项目,用户按下键盘方向键(非数字键盘)来移动头像。 我编码很难检查这些键的按键。 在Pascal中,使用“readkey”和代码很容易,例如,#80用于向下按键。 但是,我很难理解如何在Java中实现相同的function,尽管我认为我理解使用System.in和BufferedInputStream。

任何人都可以帮我吗? 非常感谢您的想法或提示。

Java中的控制台支持问题是众所周知的,我不确定这是否可行。

System.in最初无法实现这一点,因为它曾用于基于行的工作。

Sun最终添加了一个java.io.Console类。

以下是它的JavaDocs: http : //java.sun.com/javase/6/docs/api/java/io/Console.html

一旦你得到控制台(我想从System.console),你可以得到一个读者,也许从中读取字符,但我不确定它是否包含密钥。

一般来说,如果你想要访问键盘,你应该使用Swing或AWT,这很愚蠢。

截至2007年,有一个关于它的function请求: 这里

不幸的是,这是不可能以便携的方式:

http://forums.sun.com/thread.jspa?threadID=5351637&messageID=10526512

在Windows上,即使您不使用BufferedReader ,从System.in读取也将阻止,直到按下enter键。 箭头将循环显示命令历史记录。 亲自尝试一下:

 import java.io.*; public class KeyTest { public static void main(String[] argv) { try { InputStreamReader unbuffered = new InputStreamReader(System.in); for (int i = 0; i < 10; ++i) { int x = unbuffered.read(); System.out.println(String.format("%08x", x)); } } catch (Exception e) { System.err.println(e); } } } 

使用Console类的相同问题(Windows下缓冲的输入,Windows解释的箭头键):

 import java.io.*; public class KeyTest2 { public static void main(String[] argv) { try { Console cons = System.console(); if (cons != null) { Reader unbuffered = cons.reader(); for (int i = 0; i < 10; ++i ) { int x = unbuffered.read(); System.out.println(String.format("%08x", x)); } } } catch (Exception e) { System.err.println(e); } } } 

如果java.io.console不适合你(我还没试过),试试JLine 。 我用它来解决一个模糊的类似问题 。

没有内置的Java代码。 如果要继续,请查看上面提到的java curses库或JLine。