Ich entwerfe eine Konsolenanwendung für einen Server, auf dem RedHat ausgeführt wird. Die Endbenutzer sollten diese App mit einem beliebigen Terminal ihrer Wahl ausführen können. (Zum Beispiel; Gnome Terminal, Putty SSH/Telnet, MS Telnet Client und andere).Festlegen der Umgebung für System.in
In den meisten Terminal-Anwendungen ist nichts falsch, aber wenn ich mein Programm von einer MS-Telnet-Sitzung starte, bemerke ich, dass meine speziellen Eingänge für System.in
und System.console()
völlig durcheinander geraten. Eine Rücktaste schreibt ^H
auf den Bildschirm und andere Schlüssel schreiben auch Kauderwelsch.
Ich habe es genug gehackt, dass ich es konsequent bekommen zu arbeiten, aber ich bin sicher, was ich tue, ist gross:
if (!System.getenv("TERM").equals("xterm"))
{
System.out.println("\nWARNING: The TERM type is now set to xterm\n");
final String[] cmd = { "/bin/sh", "-c", "export TERM=xterm" };
Runtime.getRuntime().exec(cmd);
}
Gäbe es ein Problem sein, hier für Endgeräte, die don unterstützt nicht xterm
? Ich merke, dass der Microsoft Telnet-Client es Ihnen nicht erlaubt, den -Typ auf xterm
festzulegen, bevor Sie eine Sitzung beginnen. Sobald die Sitzung gestartet wird, scheint jedoch die Einstellung das Problem zu lösen.
Wie gehen die meisten Konsolenanwendungen mit diesem Problem um?
Wahrscheinlich sind Ihre Kauderwelsch ansi Escape-Pässe http://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognise-ansi-vt100-escape-sequences?lq=1 –
suchen Sie dort : https://github.com/fusesource/jansi Jansi ist eine kleine Java-Bibliothek, die Sie ANSI-Escape-Sequenzen zu verwenden, ermöglicht die Konsole Ausgabe zu formatieren, die auch auf Windows funktioniert. –
@AndreasFrische oh wow, das sieht vielversprechend aus! Ich muss damit herumspielen! – flakes