La plupart des démonstrations montrant l'événement en swing, quelle est l'équivalent en ligne de commande? P>
4 Réponses :
Swing est différent d'un environnement de ligne de commande dans le sens où vous n'avez pas événements em> 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 de ce type. P>
Qu'est-ce que vous Bien sûr, vous pouvez toujours faire la lecture de manière asynchrone sur un fil séparé. C'est-à-dire le fil principal continuera de faire des trucs, avec un fil d'auditeur qui attend sur l'appel de blocage d'E / S. Mais cela ne peut être mis en œuvre et traités que sur le niveau d'application. P>
Vous pouvez utiliser bufferedreader code> 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();
Pour avoir une fonctionnalité équivalente dans une application de ligne de commande, vous pouvez utiliser le jnnativehook em> strong> bibliothèque qui accomplit cette via Keylistener code> est uniquement pour les classes swing. p>
JNI code>. Cela vous permettra d'écouter les raccourcis globaux ou le mouvement de la souris qui serait autrement impossible en utilisant Pure Java. Vous n'avez pas non plus besoin d'utiliser
balançoire code> ou d'autres classes d'interface graphique. P>
La "bibliothèque JnativeHook" n'aide pas si vous souhaitez gérer la combinaison de touches "Ctrl + C" - le programme se terminera de manière habituelle.
Notez que JNATIVEHOOK nécessite que X11 fonctionne (au moins jusqu'à la version 2.1.0) en fonction de ce problème: github.com/kwhat/jnativehook/issues/162 . Par exemple, j'ai essayé de l'utiliser dans un conteneur Docker et il n'a pas fonctionné.
Le code suivant empêchera la combinaison CTRL + C d'arrêter un programme 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'est-ce qu'un programme CLI Java?