QA@IT

javaでコンソールが利用できない状況であることの判定

3040 PV

お世話になります。

GUIが利用できない状況は java.awt.GraphicsEnvironment.isHeadless で調べられたりしますが、
その逆の状況(GUI onlyなVMであるか)を調べる良い方法は無いものでしょうか?

例えば、Windowsプラットフォームでは JVM として javaw.exe を利用すると
コンソールは使えない(出力しても捨てられる)状況で起動しますが、
これを検知して振る舞いを変えようと思っています。

コンソールが利用できないならGUIアプリとして動かしたいと考えています。

回答

こちらの stackoverflowの回答にあるように

http://stackoverflow.com/a/1403817/2513010

System.console() がnullを返すか否かで判定するのはどうでしょうか。
(ただし Java6以降)

深く見ていませんが、同じページの System.console() vs isatty() も参考になりそうです。

http://stackoverflow.com/a/23419451/2513010


蛇足ですがSystem.setOut(PrintStream)を使えばjavawであっても標準出力先は設定できますので、その点は留意して下さい。
(System.console()はnullのままです。)

import java.io.*;

public class Qait9517Sample{
  public static void main(String[] args){
    try(
    PrintStream outer = new PrintStream(new BufferedOutputStream(new FileOutputStream("output.txt")));
    ){
      if(System.console() == null){
        System.setOut(outer);
      }
      System.out.println("console is null : " + (System.console() == null));

    }catch(IOException e){
      System.out.println(e);
    }
  }
}
編集 履歴 (0)
  • なるほど!今回の私の用途には十分なので利用させていただきます。ありがとうございました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。