La plupart des démos montrant le keyevent dans Swing, quel est l'équivalent dans la ligne de commande?Écouteur de touche Java dans la ligne de commande
Répondre
Swing est différent d'un environnement de ligne de commande en ce sens que vous n'avez aucun événements dans une fenêtre de console. Une interface graphique standard traite des objets et des événements. Une console n'a pas de notion équivalente.
Ce que vous avez est une entrée standard (ainsi qu'une sortie standard), que vous pouvez lire. Voir this question sur la façon de lire un seul char de la console (sans attendre un retour à la ligne) - ou plutôt, sur comment cela n'est pas très facile à faire en Java.
Bien sûr, vous pouvez toujours effectuer la lecture de manière asynchrone sur un thread séparé. c'est-à-dire que le thread principal continue de faire des choses, avec un thread d'écoute qui attend l'appel de blocage d'E/S. Mais ceci ne peut être implémenté et géré qu'au niveau de l'application.
vous pouvez utiliser BufferedReader
dans une boucle:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while (line.equalsIgnoreCase("quit") == false) {
line = in.readLine();
//do something
}
in.close();
KeyListener
est que pour les classes de swing.
Pour avoir une fonctionnalité équivalente dans une application de ligne de commande, vous pouvez utiliser la bibliothèque JNativeHook qui l'accomplit via JNI
. Cela vous permettra d'écouter les raccourcis globaux ou les mouvements de la souris qui seraient autrement impossibles en Java pur. Vous n'avez également pas besoin d'utiliser Swing
ou d'autres classes d'interface graphique.
La bibliothèque "JNativeHook" n'aide pas si vous voulez gérer la combinaison de touches "Ctrl + C" - le programme se termine de la manière habituelle. – javauser71
Notez que JnativeHook nécessite X11 pour fonctionner (au moins jusqu'à la version 2.1.0) selon ce problème: https://github.com/kwhat/jnativehook/issues/162. Par exemple, j'ai essayé de l'utiliser dans un conteneur Docker et cela n'a pas fonctionné. – Kenairod
Le code suivant empêche la combinaison Ctrl + C d'arrêter un programme Java CLI.
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'est-ce qu'un programme CLI Java? –
CLI - Interface de ligne de commande ... Je pense. – Joe
- 1. Déclencher la touche HAUT dans la ligne de commande?
- 2. Ligne de commande Java?
- 3. Exécuter Java de la ligne de commande
- 4. Fichier java de ligne de commande Java
- 5. Application de ligne de commande Java slick?
- 6. Arguments de ligne de commande Java
- 7. Ligne de commande facile Compilation Java
- 8. commande Java Servlets ligne de traitement
- 9. compiler java à partir de la ligne de commande
- 10. Empêcher Java d'analyser les paramètres de la ligne de commande
- 11. Java Runtime ligne de commande Process
- 12. % VIM touche Commande
- 13. espace dans les arguments de ligne de commande Java
- 14. Comment invoquer groovy avec 'java' depuis la ligne de commande
- 15. Application Java interagissant avec la ligne de commande
- 16. Rapports dans la ligne de commande FitNesse
- 17. paramètres d'URL dans la ligne de commande
- 18. Java - changer de focus sur la touche
- 19. Spécifier la propriété antialias dans la ligne de commande
- 20. utilitaire de ligne de commande Python à partir de Java
- 21. java aide applet action écouteur
- 22. liste d'options de ligne Java de commande de navigation
- 23. Touche de commande plus molette de la souris
- 24. bonne façon de lire l'entrée de l'utilisateur à partir de la ligne de commande dans java
- 25. Accéder au web en Java, argument de ligne de commande?
- 26. Problèmes de ligne de commande Java avec les bibliothèques .jar
- 27. Exécution de la commande curl dans Java
- 28. Logiciel de ligne de commande d'intégration avec programme Java
- 29. ligne de commande d'entrée de tuyau en Java
- 30. Fin application de ligne de commande Java correctement
fonctionne très bien, merci! – Buffalo