Swing unterscheidet sich von einer Befehlszeilenumgebung in dem Sinne, dass Sie keine Ereignisse in einem Konsolenfenster haben. Eine Standard-GUI behandelt Objekte und Ereignisse. Eine Konsole hat keine solche äquivalente Vorstellung.
Was Sie tun haben, ist eine Standardeingabe (sowie eine Standardausgabe), aus der Sie lesen können. Siehe diese Frage , wie man ein einzelnes Zeichen von der Konsole liest (ohne auf eine neue Zeile zu warten) - oder vielmehr, wie das in Java nicht so einfach ist.
Natürlich können Sie das Lesen immer asynchron in einem separaten Thread durchführen. d. h. der Haupt-Thread wird weiterarbeiten, wobei ein Listener-Thread auf den I / O-blockierenden Anruf wartet. Dies kann jedoch nur auf Anwendungsebene implementiert und gehandhabt werden.
KeyListener
ist nur für Swing-Klassen.
Um eine gleichwertige Funktionalität in einer Befehlszeilen-App zu erhalten, können Sie das JNativeHook JNI
erreicht. Auf diese Weise können Sie nach globalen Verknüpfungen oder Mausbewegungen lauschen, die sonst mit reinem Java nicht möglich wären. Sie müssen auch Swing
oder andere GUI-Klassen nicht verwenden.
Der folgende Code verhindert, dass die Strg + C-Kombination ein CLI-Java-Programm stoppt.
%Vor%Tags und Links java command-line