Frage

Ich habe Probleme bei der Erfassung des Tastendruckes in meiner Java-Befehlszeilen-Anwendung. Mit System.in.read () Ich scheine nicht, etwas zu bekommen, wenn die Tab-Taste zu treffen. Was ist der beste Weg, um dieses?

Ansatz

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?).

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top