2010-10-23 19 views

Respuesta

8

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 usted do tiene es una entrada estándar (así como una salida estándar), que puede leer. Consulte this question 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 puede hacer la lectura asincrónicamente en un hilo separado. es decir, el hilo principal seguirá haciendo cosas, con un hilo oyente esperando en la llamada de bloqueo de E/S. Pero esto solo puede implementarse y manejarse en el nivel de la aplicación.

4

puede utilizar 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(); 
+0

funciona muy bien, gracias! – Buffalo

4

KeyListener es sólo para las clases de swing.

Para tener una funcionalidad equivalente en una aplicación de línea de comandos, puede usar la biblioteca JNativeHook que lo hace a través del 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.

+0

La "biblioteca JNativeHook" no ayuda si desea manejar la combinación de teclas "Ctrl + C": el programa finaliza de la forma habitual. – javauser71

+0

Tenga en cuenta que JnativeHook requiere que X11 funcione (al menos hasta la versión 2.1.0) según este problema: https://github.com/kwhat/jnativehook/issues/162. Por ejemplo, traté de usarlo en un contenedor Docker y no funcionó. – Kenairod

2

El siguiente código evitará que la combinación Ctrl + C detenga un programa 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); 
     } 
    }); 
+0

¿Qué es un programa CLI Java? –

+0

CLI - Interfaz de línea de comandos ... Creo. – Joe

Cuestiones relacionadas