teclado scanner por numeros nombre leer lectura ingresar datos clase capturar java keyboard jline

scanner - Análisis de entrada de teclado Java en una aplicación de consola



lectura de datos en java (2)

No puede usar una consola para obtener una entrada no bloqueante sin bibliotecas nativas.

Tendrás que escribir una aplicación Swing y escribir un KeyListener

Lee este tutorial: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

Acabo de empezar a jugar con JLine para analizar la entrada de caracteres en el modo de consola. Parece que funciona bien, pero me pregunto:

¿Hay una forma no bloqueante en JLine para averiguar si hay caracteres disponibles? (es decir, como kbhit() en Windows.)

Supongo que siempre podría envolver la entrada del teclado en su propio hilo, que luego ofrece los caracteres del teclado en una cola segura para subprocesos al hilo principal, pero parece que no debería ser necesario.

EDITAR : Esto es un análisis de carácter por carácter. No voy a usar una GUI. La entrada / salida InputStream habitual en Java en el modo de consola requiere que pulse primero la tecla Intro (p. Ej., Solo se trata de una entrada en el búfer). No me digas que la entrada de carácter por carácter en el modo de consola es imposible en Java; no lo es JLine lo hace usando una interfaz portátil con una implementación dependiente de la plataforma.

Editar actualización : Pude hackear juntos una clase de ayuda para hacer la E / S de bloqueo en un hilo de trabajo (usando JLine para la E / S por personaje, advertencia: ¡tienes que analizar Ctrl-C por tu cuenta!) Y luego comunicar a través de una cola sincronizada con una rutina isempty (). Por lo que estoy haciendo en este momento está bien, pero realmente me gustaría saber una buena manera de hacer esto en el futuro.


Usted parece estar en el camino correcto.

Creo que la forma "correcta" de hacerlo es un hilo de trabajo que vierte todas las E / S de bloqueo en una cola sin bloqueo. Eche un vistazo a ConcurrentLinkedQueue de java.util.concurrent .