Oyente de clave Java en Commandline

La mayoría de las demostraciones muestran keyevent en Swing, ¿cuál es el equivalente en la línea de comandos?

Swing es diferente de un entorno de línea de comandos en el sentido de que no tiene eventos en una ventana de consola. Una GUI estándar trata de objetos y eventos. Una consola no tiene esa noción equivalente.

Lo que tiene es una entrada estándar (además de una salida estándar), que puede leer. Vea esta pregunta sobre cómo leer un solo carácter desde la consola (sin esperar una nueva línea), o más bien, sobre cómo esto no es muy fácil de hacer en Java.

Por supuesto, siempre puedes leer de forma asincrónica en un hilo separado. es decir, el hilo principal seguirá haciendo cosas, con un hilo oyente esperando en la llamada de locking de E / S. Pero esto solo puede implementarse y manejarse en el nivel de la aplicación.

puedes usar BufferedReader en un bucle:

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = ""; while (line.equalsIgnoreCase("quit") == false) { line = in.readLine(); //do something } in.close(); 

KeyListener es solo para clases de swing.

Para tener una funcionalidad equivalente en una aplicación de línea de comandos, puede usar la biblioteca JNativeHook que logra esto a través de JNI . Esto le permitirá escuchar atajos globales o movimientos de mouse que de otro modo serían imposibles usando Java puro. Tampoco necesita usar Swing u otras clases de GUI.

El siguiente código evitará que la combinación Ctrl + C detenga un progtwig CLI java.

 import sun.misc.Signal; import sun.misc.SignalHandler; Signal.handle(new Signal("INT"), new SignalHandler() { // Signal handler method public void handle(Signal signal) { System.out.println("Got signal" + signal); } });