2009-01-05 10 views
8

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:Análisis de entrada de teclado Java en una aplicación de consola

¿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.

EDIT: Este es el análisis carácter por carácter. No voy a usar una GUI. La entrada/salida de InputStream habitual en Java en el modo de consola requiere que pulse primero la tecla Intro (por ejemplo, solo es una entrada con 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: yo era capaz de hackear juntos una clase de ayuda para hacer el bloqueo de E/S en un subproceso de trabajo (usando JLine para la E/S, la alerta por carácter: hay que analizar Ctrl-C usted mismo!) & luego comunicarse 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.

+4

¿Podría publicar una copia cortada de la respuesta? Se ve muy interesante. – OscarRyz

Respuesta

4

Usted parece estar en el camino correcto.

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

Cuestiones relacionadas