Ich verwende JLine 2 (v2.13) in Verbindung mit einem Socket IO, um eine Admin-Konsole für meine App zu erstellen kann über einen gewöhnlichen Telnet-Client zugegriffen werden. Wie auch immer, ich fand heraus, dass es seltsame Symbole ausdruckt, wenn es einen Zeilenumbruch ausgibt:
%Vor%Die korrekte Ausgabe sollte sein:
%Vor%Ich habe den Code verfolgt und die folgende Codezeile gefunden, die den Fehler verursacht hat:
Eine weitere seltsame Sache ist, wenn ich den Pfeil nach oben drücke, um den Verlauf zu erhalten, gibt die Konsole ^[[A
aus und nichts passiert mehr.
Hat jemand eine Idee?
Aktualisieren : relevanter Quellcode hinzugefügt
ConsoleReader
erstellt und den folgenden Befehl absetzt: Update 2
Entschuldigung, ich bin für eine Weile verschwunden. Komm einfach zurück, denn mein Projekt gibt mir frischen Wind. Hier ist was passiert ist: Ich habe ein PrintWriter
erstellt und verwende es als Workaround für das ^J
issue:
Allerdings gibt es viele andere Probleme, wenn jline2
zusammen mit der Telnet-Sitzung verwendet wird:
<TAB>
ein, anstatt die vollständige Liste zu aktivieren. Aber nachdem ich die Eingabetaste gedrückt habe, gibt es eine vollständige Liste mit einer Fehlermeldung:
<UP>
arrow ein, zeigt ^[[A
an, drücken Sie die Eingabetaste, um den letzten Befehl auszuführen. Allerdings habe ich die Bearbeitung der Befehlszeile verloren Das Problem ist immer noch da und ich glaube, es sollte einen Weg geben, es zu lösen, braucht nur einen Leitfaden ...
Bearbeiten: Mein Fehler, die Methode, die ich zeigte, ist privat. Dennoch ist es kein Bug - der Code tut, was er tun soll. Die beiden öffentlichen Methoden, die rawPrint verwenden (ich setze sie am Ende), verwenden sie nur für maskierte Ausgaben und anscheinend für das Drucken von Vervollständigungen. Daher unterstützt ConsoleReader Ihren Anwendungsfall wahrscheinlich nicht - es könnte ein Designfehler sein, aber ich denke, es ist gemeint so zu sein. Die Probleme mit der Pfeiltaste werden in der Dokumentation als vorübergehendes Konfigurationsproblem erwähnt.
ConsoleReader.java ist hier: Ссылка
Ich denke, es ist die letzte Version, usw.
Sie erstellen einen ConsoleReader mit dem Aufruf println (). LF wird als ^ J angezeigt. Dies ist kein Fehler in dem Sinne, dass die Methode tut, was sie tun soll:
%Vor%ruft schließlich
auf %Vor%Diese Funktion macht, was Sie wollen, ist aber privat:
%Vor%Er kann über die öffentlichen Methoden putString (final CharSequence str) in Zeile 895 und printColumns (final Collection items) in Zeile 3715 aufgerufen werden. putString ruft sie nur bei maskierter Ausgabe auf, so dass sie für Sie sinnlos ist und printColumns scheint für Fertigstellungen gedacht.
Vielleicht sollten Sie Zeilen getrennt drucken und ConsoleReader Zeilenumbrüche hinzufügen lassen? Technisch gesehen ist LF ein Steuercode und es ist sinnvoll ConsoleReader zu verbieten, Steuercodes so zu drucken wie sie sind. Teilen Sie Ihre Eingabe in Zeilen, drucken Sie sie nacheinander.