2016-12-09 50 views
4

我正在Java中构建一个使用ANSI转义代码使用具有不同颜色的菜单的程序。像检查控制台是否支持Java中的ANSI转义码

System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m"); 

的问题是什么,我要检查,如果在代码使用此代码将要执行的支持Console,所以如果没有的话,打印的替代版本没有代码。

这将是类似于:

if(console.supportsANSICode){ 
    System.out.println("\u001B[36m"+"Menu option"+"\u001B[0m"); 
} 
else{ 
    System.out.println("Menu option"); 
} 

是否有在Java的方法来检查呢?

+0

的一点是,检查是否控制台支持ANSI转义代码是不是最好的方式做到这一点。事实上,你必须在'System.out'写入器上使用'PrintWriter',这样你就可以在其上设置Encoding类型 – DamCx

回答

1

我不知道Java有一些特殊的方式来解决这个问题,但有两种方法可以解决这一问题本身。使用(在UNIX世界至少)通常的方法是获得来自TERM环境变量中使用的终端,并期待从terminfo/termcap数据库它的功能(通常使用cursesslang)。另一个更粗糙的方法是发送设备状态报告代码("\u001B[6n")并检查终端是否响应。这当然有些黑客,因为支持DSR代码的终端可能不支持颜色。