문제

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을 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top