leer un solo carácter desde teclado, en Java ¿ getch() en Java ?

La función getch() en lenguaje C sirve para leer un único carácter desde teclado, sin eco en la pantalla. Se usa muy habitualmente para aplicaciones de linea de comandos.

Pero no es una función estándar. Está declarada en conio.h, que es un archivo de cabecera usado principalmente por compiladores que generan programas ejecutables para el sistema operativo MSDOS. Por tanto no puede ser usada en otros sistemas operativos como Linux.

Si quieres escribir una aplicación para linea de comandos que lea caracteres de la entrada estándar y escriba caracteres en la salida estándar, el comportamiento es completamente diferente en lenguaje C y en lenguaje Java:

El modo en el que se manejan las pulsaciones de teclas depende del terminal en el que se ejecuta la aplicación. La mayoría de los terminales Linux no envían nada a la entrada estándar de las aplicaciones cuando se pulsa una única tecla.

Y Java debe ser compatible con todos los terminales.

Java lee de la entrada estándar mediante un flujo que, con el objetivo de la compatibilidad entre terminales, no es enviado a las aplicaciones hasta que se pulsa la tecla Intro/Retorno de carro.

Por tanto un programa de linea de comandos (un programa de consola) en Java nunca podrá responder a una simple tecla, salvo, claro está, la tecla Intro/Retorno de carro.

Los ejemplos siguientes no obedecen a la pulsación de una única tecla, como cabría esperar pulsando la "S" o la "N", ya que es necesario pulsar Intro para que se actualice la variable "respuesta".

a) USANDO SCANNER:

String respuesta;
Scanner teclado=new Scanner(System.in);

System.out.println("¿Desea continuar? (S/N)");

respuesta=teclado.nextLine();




b) USANDO DIRECTAMENTE SYSTEM.IN.READ()

char respuesta;

System.out.println("¿Desea continuar? (S/N)");

respuesta=(char)System.in.read();





La solución:

Escribir una aplicación gráfica con AWT o Swing, que capture los eventos de teclado.







blog39 - leer un solo carácter desde teclado, en Java ¿ getch() en Java ?  - - -SUSCRIPCIONES - - -http://www.rojasdelgado.com