我正在用Java构建一个程序,它使用ANSI转义码使用不同颜色的菜单。
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
问题是,我想检查的控制台的代码将被执行支持使用这些代码,所以在情况下,它不支持,打印一个替代版本没有代码。
它将类似于:
if(console.supportsANSICode){
System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m");
}
else{
System.out.println("Menu option");
}
Java中有没有一个方法来检查这个?
2条答案
按热度按时间svujldwt1#
一个简单的纯java解决方案:
第一个条件是检查是否连接了终端,第二个是检查是否定义了$TERM env var(在Windows上没有)。
k10s72fa2#
我不知道Java是否有特殊的方法来处理这个问题,但有两种方法来处理问题本身。通常使用的方法(至少在unix环境中)是从
TERM
环境变量中获取所使用的终端,并从terminfo/termcap数据库中查找它的功能(通常使用curses或slang)。另一种更粗糙的方法是发送设备状态报告代码("\u001B[6n"
)并检查终端是否响应。这当然有点黑客,因为支持DSR代码的终端可能不支持颜色。