1

複数のスレッドを持つ Java プログラムを作成しています。スレッドの 1 つは、標準入力から行を読み取って解析する役割を果たします。

通常の実行時はすべて正常に動作しますが、プログラムがバックグラウンドで (Linux で) 実行されている場合は、次を使用します。

$ java -jar my_jar_file &

プログラムがハングします (少なくともフォアグラウンドになるまで)。

バックグラウンドで実行しているときは、標準入力はあまり必要ありませんが、プログラムがハングアップすることも望ましくありません。

プロセスがバックグラウンドで実行されているかどうかをプログラムで判断する方法を探しましたが、見つかりませんでした。

標準入力から読み取るコードは次のとおりです。

InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inputStreamReader);

String line = null;

try {
  while ((line = br.readLine()) != null) {
    parseInputLine(line, br);
  }
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

私が知る限り、プログラムはbr.readLine()コマンドに到達するとハングします。

4

4 に答える 4

0

コマンドラインから入力をパイプできるかもしれない入力を待って、リーダーがブロックしていると思います

于 2013-08-22T15:07:56.393 に答える
0

.ready() 関数を使用してみてください。

try {
      if (stdError.ready()) 
      {
            while((line= stdError.readLine()) != null){
                logger.error(line);
            }
      }
}

stdout についても同じことを行います。

于 2016-06-09T08:29:10.853 に答える