Java Tastatureingabe in einer Konsole app Parsen
Frage
Ich habe gerade erst begonnen Herumspielen mit jline Zeicheneingabe im Konsolenmodus zu analysieren. Es scheint gut zu funktionieren, aber ich frage mich:
Gibt es eine nicht-blockierende Art und Weise in jline, um herauszufinden, ob Zeichen verfügbar sind? (Dh wie kbhit()
in Windows.)
Ich glaube, ich immer die Tastatureingabe in einem eigenen Thread wickeln könnte, die dann in einer Thread-sichere Warteschlange an den Haupt-Thread die Tastaturzeichen bieten, aber das scheint, wie es nicht notwendig sein sollte.
Bearbeiten : Dies ist Zeichen-für-Zeichen-Parsing. Ich werde nicht eine GUI verwenden. Die übliche Input I / O in Java im Konsolenmodus erfordert, dass Sie die Enter-Taste zuerst (z es gepuffert Eingang) zu treffen. Bitte erzählen Sie mir nicht Zeichen-für-Zeichen-Eingabe im Konsolenmodus in Java nicht möglich ist; es ist nicht. Jline hat es eine portable Schnittstelle mit einer plattformabhängigen Implementierung verwendet wird.
Bearbeiten Update : Ich konnte zusammen eine Hilfsklasse hacken die Blockierung I / O in einem Arbeitsthread (mit jline für die pro-Zeichen I / O, Warnung zu tun: Sie müssen parsen Ctrl-C selbst!) & dann über eine synchronisierte Warteschlange mit einer isempty () -Routine kommunizieren. Für das, was ich jetzt tue das ist in Ordnung, aber ich würde wirklich einen guten Weg, zu wissen, wie diese in der Zukunft zu tun.
Lösung
Sie scheinen auf dem richtigen Weg zu sein.
Ich denke, der „richtige“ Weg, dies zu tun, ein Worker-Thread ist, dass alle die Blockierung gießt I / O in eine nicht-blockierende Warteschlange. Hava ein Blick auf ConcurrentLinkedQueue java.util. gleichzeitig .
Andere Tipps
Sie können eine Konsole benutzen Sie nicht blockierende Eingabe ohne native Bibliotheken.
Sie erhalten eine Swing-App schreiben müssen und schreiben Sie eine KeyListener
Bitte lesen Sie diese Anleitung: http://java.sun.com/docs/books/ tutorial / uiswing / events / keylistener.html