Pregunta

Buenas, todo,

Tengo un proyecto de consola en la que se pretende que el usuario presiona las teclas de dirección del teclado (teclado no numérico) para mover un avatar. Tengo dificultades de codificación para comprobar la prensa de estas teclas. En Pascal era bastante fácil de usar "readkey" y el código, por ejemplo, para el # 80 para la pulsación de tecla hacia abajo. Sin embargo, estoy confundido cómo implementar la misma funcionalidad en Java, aunque creo que entiendo el uso de System.in y BufferedInputStream.

¿Puede alguien ayudarme? Sus pensamientos o sugerencias son muy apreciadas.

¿Fue útil?

Solución

El problema de soporte de consola en Java es bien sabido, no estoy seguro de que esto es factible.

Esto no fue posible inicialmente con System.in ya que utiliza para trabajar a base de línea.

Sun finalmente añadió una clase java.io.Console.

Aquí están sus JavaDocs: http://java.sun.com/javase/ 6 / docs / api / java / io / Console.html

Una vez que la consola (creo que desde System.Console), se puede obtener un lector y tal vez leer caracteres de ella, pero no estoy seguro de si se incluye teclas.

En general, se supone que debes usar oscilación o AWT si desea acceder al teclado, que es tonta.

A partir de 2007, se produjo una de estas solicitudes al respecto: aquí

Otros consejos

Si java.io.Console no funciona para usted (no he probado eso), prueba a JLine . Lo utilicé para resolver un vagamente problema similar .

Por desgracia esto no es posible de una manera portátil:

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

En Windows, la lectura de System.in bloqueará hasta que se pulse enter, incluso cuando no se utiliza un BufferedReader. Las flechas se desplazará por el historial de comandos. Inténtelo usted mismo:

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);
    }
  }
}

El mismo problema utilizando la clase Console (entrada en el buffer bajo Windows, teclas de flecha intepreted por 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);
    }
  }
}

No con una función de código Java. Confirmar java maldice bibliotecas o JLine como se mencionó anteriormente, si desea continuar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top