Wie liest man ein einzelnes Zeichen von der Konsole in Java (wie der Benutzer es eingibt)?
Gibt es einen einfachen Weg zum Lesen eines einzelnen char von der Konsole als Benutzer ist Eingabe in Java? Ist es möglich? Ich habe versucht, mit diesen Methoden, aber Sie alle warten für den Benutzer zu drücken geben Sie Schlüssel:
char tmp = (char) System.in.read();
char tmp = (char) new InputStreamReader(System.in).read ();
char tmp = (char) System.console().reader().read(); //Java 6
Ich fange an zu denken, dass System.in ist sich nicht bewusst von der Benutzereingabe bis geben Sie gedrückt wird.
InformationsquelleAutor der Frage victor hugo | 2009-06-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun möchten, ist setzen Sie die Konsole in den "raw" - Modus (Zeile Bearbeiten umgangen und keine enter-Taste erforderlich), im Gegensatz zu "cooked" - Modus (Zeile Bearbeiten mit der enter-Taste erforderlich.) Auf UNIX-Systemen, das "stty" - Kommando kann die Modi ändern.
Nun, mit Bezug auf Java - ... siehe Nicht blockierende Konsolen-Eingabe in Python und Java. Auszug:
Einer der Vorschläge ist die Verwendung von JNI. Wieder, das ist nicht sehr portabel. Ein weiterer Vorschlag am Ende des thread, und gemeinsam mit dem Beitrag oben, ist ein Blick auf die Verwendung jCurses.
InformationsquelleAutor der Antwort Chris W. Rea
Müssen Sie klopfen Sie Ihre Konsole in den raw-Modus. Es ist keine integrierte Plattform-unabhängigen Weg dorthin. jCurses könnte interessant sein, obwohl.
Auf einem unix-system, das funktionieren könnte:
Zum Beispiel, wenn Sie möchten, zu berücksichtigen, die Zeit zwischen den einzelnen Tastenanschlägen, hier ist Beispielcode, um dorthin zu gelangen.
InformationsquelleAutor der Antwort nes1983
Gibt es keinen portablen Weg, um raw Lesen von Zeichen aus einer Java-Konsole.
Einige Plattform-abhängigen Problemumgehungen wurden oben dargestellt. Aber wirklich tragbar sein, Sie würden aufgeben müssen-Konsole-Modus und verwenden Sie eine windowing-Modus, z.B. AWT oder Swing.
InformationsquelleAutor der Antwort rustyx
Ich geschrieben habe, eine Java-Klasse RawConsoleInput verwendet JNA zu nennen Betriebssystem-Funktionen von Windows und Unix/Linux.
_kbhit()
und_getwch()
aus msvcrt.dll.tcsetattr()
schalten Sie die Konsole, um den nicht-kanonischen ModusSystem.in.available()
um zu überprüfen, ob Daten verfügbar sind undSystem.in.read()
zum Lesen von bytes von der Konsole aus. EinCharsetDecoder
wird zum konvertieren von Byte zu Zeichen.Es unterstützt non-blocking input-und mixing-raw-Modus und normal-line-mode-Eingang.
InformationsquelleAutor der Antwort Christian d'Heureuse
Verwenden jline3:
Beispiel:
InformationsquelleAutor der Antwort Pod