¿Existe una manera fácil de leer un solo carácter desde la consola mientras el usuario lo escribe en Java? ¿Es posible? Probé con estos métodos, pero todos esperan a que el usuario presione la tecla Intro :
char tmp = (char) System.in.read();
char tmp = (char) new InputStreamReader(System.in).read ();
char tmp = (char) System.console().reader().read(); // Java 6
Estoy empezando a pensar que System.in no es consciente de la entrada del usuario hasta que se presiona enter .
Necesitas poner tu consola en modo raw. No hay una forma integrada de llegar allí independiente de la plataforma. Sin embargo, jCurses podría ser interesante.
En un sistema Unix, esto podría funcionar:
Por ejemplo, si desea tener en cuenta el tiempo entre pulsaciones de teclas, aquí tiene un código de muestra para llegar allí.
fuente
stty cooked </dev/tty
debe ejecutarse cuando el programa necesite volver al modo de búfer y definitivamente antes de que el programa salga.No existe una forma portátil de leer caracteres sin formato desde una consola Java.
Algunas soluciones alternativas dependientes de la plataforma se han presentado anteriormente. Pero para ser realmente portátil, tendría que abandonar el modo de consola y utilizar un modo de ventana, por ejemplo, AWT o Swing.
fuente
System.Console.ReadKey
que funciona en todas las plataformas. Java también distribuye JVM y JRE para cada plataforma con bibliotecas e implementaciones dependientes de la plataforma, así que eso no es excusa.Escribí una clase de Java RawConsoleInput que usa JNA para llamar a funciones del sistema operativo de Windows y Unix / Linux.
_kbhit()
y_getwch()
desde msvcrt.dll.tcsetattr()
para cambiar la consola al modo no canónico,System.in.available()
para verificar si hay datos disponibles ySystem.in.read()
leer bytes de la consola. ACharsetDecoder
se utiliza para convertir bytes en caracteres.Admite entrada sin bloqueo y modo de mezcla sin procesar y entrada de modo de línea normal.
fuente
Utilice jline3 :
Ejemplo:
fuente