In Java, was ist der beste Weg, um einen Tastendruck zu erfassen?
-
25-09-2019 - |
Frage
Ich habe Probleme bei der Erfassung des
einig Kontext zu geben, ich versuche, damit ein Benutzer mit dem Tabulatortaste Mitte Befehl trifft es den Befehl automatisch vervollständigt haben (ähnlich wie Sie in einem Bash-Shell tun könnten). Ich bin offen für Vorschläge, wenn es besser sind Ansätze zur Erreichung dieses Ziels (vielleicht mit System.in.read () nicht den besten Winkel, diesen Ansatz?).
Lösung
Hier finden Sie aktuelle jline . Ich habe es selbst nicht verwendet. Es verwendet einen Windows-DLL (mit JNI) und es hat Linux-Unterstützung, um die Konsole zu Zeichen / Raw-Modus statt gepufferten Modus zu wechseln. Ich habe das noch nie verwendet, so erfolgt auf eigene Gefahr. Ich bin auch nicht zu 100% sicher, ob es Ihr Problem zu beheben, aber sein wert einen Schuss:)
EDIT: Ich kann es bestätigen, funktioniert
ConsoleReader cr = new ConsoleReader();
while (cr.readVirtualKey() != 0x09){
//loop till Tab is pressed
}
Erneut bearbeiten: Die Bibliothek hat die automatische Vervollständigung enthält (durch Drücken der Taste Tab) für die Kommandozeile ... Enjoy:)
Andere Tipps
Ich würde vermuten, dass Ihre Shell Registerkarte Erfassung und läßt es nicht zu Ihrer Anwendung zu verhindern. Es kann nicht sein, was Sie dagegen tun können ...
Daten von einem Inputstream werden nur zur Verfügung gestellt, wenn der Benutzer eingeben gedrückt. Ich glaube, Sie werden feststellen, dass, wenn Sie nach Tab-Taste bestätigen, wird die Registerkarte angezeigt.
In c Anwendungen gibt es etwas ähnliches: eine Schale setzt den Eingabemodus zu roh von gekocht, da es die rohen Tastatureingaben benötigt. Readline- ist die normale Bibliothek für diese in Linux verwendet. Ich bin sicher nicht das, was ist üblich unter Windows. Soweit ich denken kann, etwas JNI ist die einzige Option hier.