Java의 키보드 방향 키 감지 및 행동
문제
g'day 모두,
사용자가 키보드 방향 키 (숫자가 아닌 키패드)를 눌러 아바타를 이동하는 콘솔 프로젝트가 있습니다. 이 키의 프레스를 확인하는 데 코딩이 어려워지고 있습니다. Pascal에서는 Down Keypress의 경우 #80의 경우 "Readkey"및 코드를 사용하기가 쉽습니다. 그러나 Java에서 동일한 기능을 구현하는 방법이 혼란 스럽지만 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에서 생각합니다) 독자를 얻고 캐릭터를 읽을 수 있지만 키가 포함되어 있는지 확실하지 않습니다.
일반적으로 키보드에 액세스하려면 스윙 또는 AWT를 사용해야합니다.
2007 년 현재 이에 대한 기능 요청이있었습니다. 여기
다른 팁
java.io.console이 당신을 위해 작동하지 않으면 (나는 그것을 시도하지 않았다) 시도해보십시오. Jline. 나는 그것을 해결하는 데 사용했습니다 모호하게 비슷한 문제.
불행히도 이것은 휴대용 방식으로 불가능합니다.
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);
}
}
}
동일한 문제를 사용합니다 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 코드가 아닙니다. 계속하려면 위에서 언급 한 것처럼 Java Curses 라이브러리 또는 Jline을 확인하십시오.