• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:execでdirコマンドを実行すると停止します)

execでdirコマンドを実行すると停止します

このQ&Aのポイント
  • javaのプログラム内でdirコマンドを実行すると、特定のオプションを付けると動作が停止する問題が発生しています。
  • オプションを付けない場合には問題なく進行することから、問題はオプションに関連している可能性があります。
  • ファイルの探索に時間がかかっているわけではなく、完全に動作が停止しているため、原因を特定する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

> stdoutがブロックしているというのがよくわからないのですが > どういう状態なのでしょうか 子プロセス(このケースでは cmd /c dir)の標準出力(stdout)を読込むバッファーが満杯になり、Java側の読込みを待っている状態です。 Process の各 InputStream の読込みを行わないと、このように標準出力または標準エラー出力ブロックしてしまうことが有ります。 ↓の「ネイティブなプラットフォームには・・・」の部分を参照して下さい。 http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Process.html また、バッファーサイズは個々のJVMの実装によると思いますが、かなり小さいことが多いようです。 標準出力/標準エラー出力それぞれの読込みスレッドを作って読込ませることなどで一応の解決はできます。 下記のページも参考になるかと。 http://www.ne.jp/asahi/hishidama/home/tech/java/process.html#h4_NG_after http://blog.livedoor.jp/applepedlar/archives/51979434.html http://isolinear.info/wiki/index.php/Java/Tips/Java%A4%C7%A1%A4%BB%D2%A5%D7%A5%ED%A5%BB%A5%B9%A4%F2%BB%C8%A4%A6%A4%C8%A4%AD%A4%CE%C3%ED%B0%D5%C5%C0.html

pwpr20
質問者

お礼

丁寧な解説ありがとうございます。 一度ファイルに書き出すことにしようと思います。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

stdoutがブロックしているからでは。 command = "cmd /c dir *.java /a-d/s >NUL"; ――で正常終了するか試してみるとか。

pwpr20
質問者

補足

そのように書き換えるとwaitfor()は通過しました。(出力がなくなるのでプログラムの別の所で止まりますが) stdoutがブロックしているというのがよくわからないのですがどういう状態なのでしょうか

関連するQ&A