Projektuję aplikację konsolową dla serwera z systemem RedHat. Użytkownicy końcowi powinni mieć możliwość uruchamiania tej aplikacji z dowolnym wybranym przez siebie terminalem. (Na przykład: Terminal Gnome, Putty SSH/Telnet, klient MS Telnet i inne).Ustawianie środowiska dla System.in
W większości aplikacji terminalowych nie ma nic złego, jednak kiedy uruchamiam mój program z sesji MS Telnet, zauważam, że moje specjalne dane wejściowe dla System.in
i System.console()
są całkowicie pomieszane. Backspace napisze ^H
na ekranie, a inne klawisze również bekną.
mam posiekany na niego tyle, że mogę dostać to, aby konsekwentnie działać, ale jestem pewien, że to, co robię jest brutto:
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);
}
Czy istnieje problem tutaj na terminalach, które don wspierasz xterm
? Zauważyłem, że klient Microsoft Telnet nie zezwala na ustawienie typu TERM
na xterm
przed rozpoczęciem sesji. Jednak po uruchomieniu sesji wydaje się, że ustawienie TERM=xterm
rozwiązuje problem.
W jaki sposób większość aplikacji konsolowych rozwiązuje ten problem?
Prawdopodobnie twój bełkot są ANSI escape sequnces http://stackoverflow.com/questions/16755142/how-to-make-win32-console-recognize-ansi-vt100-escape-sequences?lq=1 –
tam zajrzeć : https://github.com/fusesource/jansi Jansi to mała biblioteka Java, która pozwala używać sekwencji kontrolnych ANSI do formatowania wyjścia konsoli, które działa nawet w oknach. –
@AndreasFrische oh wow, który wygląda obiecująco! będzie musiał się z tym bawić! – flakes