0

Windows コマンド プロンプトでコード行を実行する Java プログラムを作成しようとしています。外部プログラム (7-Zip) を使用していくつかの RAR ファイルを抽出したいと考えています (それよりも複雑ですが、当面の問題には関係ありません)。

Runtime インスタンスを取得し、.exec() メソッドを使用しました。1 つのアーカイブを単独で抽出しようとすると問題なく動作しますが、同時に複数のアーカイブを抽出しようとすると、プロセスがハングアップし、.waitFor() が返されません。

問題を調査したところ、プロセスが生成している出力が原因であると考えています。何らかのバッファがいっぱいになり、プログラムがロックされているようです。私はここに概説されました。私はこのソリューションを実装しました(入力ストリームを使用してファイルに送信したことを除いて)、実際に機能しました。ただし、まったく不要な出力をすべて書き込むには、余分な時間がかかるようです。

BufferedReader をだまして、実際に書き込むことなく、バッファにあるすべてのものを書き込んだと思わせる方法があるかどうか疑問に思っていましたか?

最後まで読んでくれてありがとう!

4

1 に答える 1

1

ハングしているのは Java 部分ではなく、出力を書き込めなくなったときにブロックするネイティブ アプリケーションです。

Java で動作させるためのコードが既にあるのに、そのままにしてみませんか?

次善の策は、外部プロセスが出力を生成しないようにすることです。たぶん「サイレント」フラグがありますか?Linux では、/dev/null にパイプすることもできますが、Windows に同等のものがあるかどうかはわかりません (ファイルにパイプできると思います)。

于 2013-10-03T08:49:56.910 に答える