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 年,有一个关于它的功能请求:here
不幸的是,这是不可能以便携的方式:
http://forums.sun.com/thread.jspa?threadID=5351637&messageID=10526512
在Windows上,从System.in读取将被阻止,直到enter被按下,即使您不使用BufferedReader.箭头将循环显示命令历史记录.亲自尝试一下:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)