Java アプリケーションで、サブプロセスの stdout および stderr 出力をキャプチャするにはどうすればよいですか? ProcessBuilder を使用して起動し、それを System.out に非同期にリダイレクトすることで、サブプロセスと出力リダイレクトをbackground?
現在のアプローチでは、継続的に stdout から読み取り、System.out に書き込む新しいスレッドを手動で作成する必要がありますが、面倒に感じられ、追加のスレッド管理が必要になります。もっと洗練された解決策はありますか?
ProcessBuilder.inheritIO を利用すると、現在の Java プロセスの標準 I/O をミラーリングするようにサブプロセスの標準 I/O を設定できます。これにより、別のスレッドを必要とせずにサブプロセスの出力が System.out に直接リダイレクトされます。
Java 7 の使用が不可能な場合、別のオプションはスレッドを使用して手動でリダイレクトすることです:
このアプローチでは、入力/エラー ストリームが最後に達すると、サブプロセスが完了すると自動的に終了するスレッドを利用します。
以上がメインスレッドをブロックせずにJavaでサブプロセス出力を非同期にリダイレクトする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。