La mayoría de las demostraciones muestran keyevent en Swing, ¿cuál es el equivalente en la línea de comandos?Oyente de clave Java en la línea de comando
Respuesta
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.
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();
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.
La "biblioteca JNativeHook" no ayuda si desea manejar la combinación de teclas "Ctrl + C": el programa finaliza de la forma habitual. – javauser71
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
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);
}
});
¿Qué es un programa CLI Java? –
CLI - Interfaz de línea de comandos ... Creo. – Joe
- 1. Ejecutando la línea de comando en Java
- 2. Oyente de directorio en Java
- 3. Barra de progreso de la línea de comando en Java
- 4. Oyente de acciones Java
- 5. Obteniendo respuesta de la línea de comando en Java
- 6. Eliminar oyente de clave del panel
- 7. ejecutar la aplicación de línea de comando interactiva desde java
- 8. Pasando la línea de comando argumento unicode al código Java
- 9. crear menús en la línea de comando
- 10. Oyente de extremo de subproceso. Java
- 11. preferencias de importación de eclipse en la línea de comando
- 12. Cómo alterar la clave externa de una tabla MySQL usando la línea de comando
- 13. Eclipse línea de comando de formato de código Java
- 14. aplicación de línea de comando lisa de Java?
- 15. Java ejecutar el programa de línea de comando
- 16. ¿Cómo borrar la línea de comando en Octave?
- 17. Argumentos de la línea de comando en la aplicación C#
- 18. ¿Cómo generar una clave openSSL usando una frase de contraseña desde la línea de comando?
- 19. Mover archivos desde la línea de comando
- 20. Entrada desde la línea de comando
- 21. instrucción sqlplus desde la línea de comando
- 22. Línea de comando de Maven
- 23. ¿Cómo ver la anotación de java classfile a través de la línea de comando?
- 24. Continuar un comando en la siguiente línea
- 25. Solicitud de contraseña de la línea de comando en PHP
- 26. Argumentos de línea de comando en python.
- 27. Cómo recuperar la versión de Java utilizando el comando de una sola línea en Linux
- 28. Compilación de varios paquetes usando la línea de comando en Java
- 29. no se puede ejecutar swing desde la línea de comando
- 30. línea de comando TortoiseSVN diff
funciona muy bien, gracias! – Buffalo