【发布时间】:2016-05-19 14:42:39
【问题描述】:
我正在为运行 RedHat 的服务器设计一个控制台应用程序。最终用户应该能够使用他们选择的任何终端运行此应用程序。 (例如;Gnome 终端、Putty SSH/ Telnet、MS Telnet 客户端等)。
在大多数终端应用程序中没有任何问题,但是当我从 MS telnet 会话启动程序时,我注意到 System.in 和 System.console() 的特殊输入完全搞砸了。退格键会将^H 写入屏幕,其他键也会乱码。
我已经对它进行了足够的破解,可以让它始终如一地工作,但我确信我正在做的事情很糟糕:
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);
}
对于不支持xterm的终端会不会有问题?我注意到Microsoft Telnet 客户端不允许您在开始会话之前将TERM 类型设置为xterm。然而,一旦会话开始,设置TERM=xterm 似乎可以解决问题。
大多数控制台应用程序如何解决这个问题?
【问题讨论】:
-
可能你的胡言乱语是 ansi 转义序列stackoverflow.com/questions/16755142/…
-
看那里:github.com/fusesource/jansi Jansi 是一个小型 Java 库,它允许您使用 ANSI 转义序列来格式化控制台输出,即使在 Windows 上也可以。
-
@AndreasFrische 哇,看起来很有希望!将不得不玩它!
-
@AndreasFrische 啊,遗憾的是我认为这行不通。看起来它只用于输出,而我的问题是输入期间显示的文本。
标签: java linux terminal console system.in