2016-12-09 10 views
4

ANSIエスケープコードを使用して異なる色のメニューを使用するJavaでプログラムを構築しています。コンソールがJavaのANSIエスケープコードをサポートしているかどうか確認してください。

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

問題のようなものは、私は場合には、それは、コードなしでの代替バージョンを印刷しないように、コードはこのコードを使用して実行される支援を行っているコンソールかどうかを確認したいということです。これを確認するには、Javaのメソッドがあります

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

それはのようなものでしょうか?

+0

重要なことは、コンソールがANSIエスケープコードをサポートしているかどうかを確認することが、これを実行する最善の方法ではないことです。実際には、 'System.out'ライターで' PrintWriter'を使用しなければならないので、エンコーディングタイプを設定することができます – DamCx

答えて

1

Javaにはこれに対処する特別な方法があるのか​​どうかわかりませんが、問題自体に対処する方法は2つあります。通常、(少なくともUNIX系では)TERM環境変数から端末を取得して、terminfo/termcapデータベース(通常はcursesまたはslangを使用)からその機能を調べます。別のより粗末なアプローチは、デバイスステータスレポートコード("\u001B[6n")を送信し、端末が応答するかどうかを確認することです。 DSRコードをサポートしている端末は色をサポートしていないかもしれないので、これはちょっとしたハックです。

関連する問題