Ich benutze JLine 2 (v2.13) in Verbindung mit einem Socket IO um eine Admin-Konsole für meine App zu erstellen, auf die über eine zugegriffen werden kann gewöhnlicher Telnet-Client. Allerdings fand ich es seltsam Symbole druckt, wenn es einen Zeilenumbruch drucken soll:jline2 print "^ J", wenn es auf einer Telnet-Konsole " n" drucken soll
act.app.restart restart app^Jact.job.list List jobs
Die richtige Ausgabe sein sollte:
act.app.restart restart app
act.job.list List jobs
ich in den Code verfolgt und fand die folgende Zeile des Codes, die Mühe verursacht:
Eine weitere seltsame Sache ist, wenn ich den Pfeil nach oben drücken Sie die Geschichte zu bekommen, die Konsole druckt ^[[A
und nichts anderes passiert.
Hat jemand eine Idee?
aktualisieren:
- Der Code der Annahme der eingehenden Telnet-Verbindung relevant Quellcode hinzugefügt:
- Der Code, erzeugt die
ConsoleReader
und sendet den Befehl:
Update 2
Sorry, ich habe für eine Weile verschwunden. Komm einfach zurück, denn mein Projekt gibt mir frischen Wind. So, hier ist was passiert: Ich habe eine PrintWriter
erstellt und verwenden Sie es als Abhilfe für das ^J
Ausgabe:
Allerdings gibt es viele andere Probleme, wenn jline2
zusammen mit Telnet-Sitzung verwendet wird:
- Typ
<TAB>
zeigt Registerkarte anstelle der vollständigen Liste zu aktivieren. Aber nachdem ich die Eingabetaste gedrückt habe, gibt es eine vollständige Liste mit einer Fehlermeldung: - Geben Sie
<UP>
Pfeil, zeigt^[[A
, drücken Sie die Eingabetaste, es wird meinen letzten Befehl ausführen. Allerdings verlor ich die Befehlszeile Bearbeitung
Das Problem ist immer noch da und ich glaube, sollte es eine Möglichkeit geben, sie zu lösen brauchen nur etwas guide ...
Haben Sie das Terminal für den von Ihnen verwendeten Client konfiguriert? Die Zeichen, die Sie sehen, sind wahrscheinlich Escape-Sequenzen, die verwendet werden, um den Cursor zu positionieren, was für den verwendeten Client Sinn machen sollte, es sei denn ANSI statt vt-100 oder Windows statt Unix. Stellen Sie sicher, dass Sie die Terminalanwendung ordnungsgemäß konfigurieren. Schauen Sie sich zum Beispiel in TerminalType AUTO um. –
Ich bin auf Linux 17.3, verwenden Sie das einfache Telnet, um eine Verbindung mit dem Java-Server herzustellen. Und der Code, um die Telnet-Verbindungsanfrage zu beantworten, ist https://github.com/actframework/actframework/blob/master/src/main/java/act/app/CliServer.java#L56. –
BTW, ich konnte die Klasse TerminalType in jline2 Quellcode nicht finden. Kannst du hier einen Link setzen? –