プロセスから出力ストリームを読み取る必要がある可能性があります。次のように stdout および stderr ストリームを取得できます。
InputStream stdout = process.getInputStream();
InputStream stderr = process.getErrorStream();
これらのストリームから非同期的に読み取るワーカー スレッドを作成できます。
Thread threadOut = new Thread( new MyInputStreamSink( stdout, "out" ));
Thread threadErr = new Thread( new MyInputStreamSink( stderr, "err" ));
threadOut.setDaemon(true);
threadErr.setDaemon(true);
threadOut.setName( String.format("stdout reader" ));
threadErr.setName( String.format("stderr reader" ));
threadOut.start();
threadErr.start();
ストリームからの出力を消費する Runnable の実装を次に示します。
private static class MyInputStreamSink implements Runnable {
private InputStream m_in;
private String m_streamName;
MyInputStreamSink( InputStream in, String streamName ) {
m_in = in;
m_streamName = streamName;
}
@Override
public void run() {
BufferedReader reader = null;
Writer writer = null;
try {
reader = new BufferedReader( new InputStreamReader( m_in ) );
for ( String line = null; ((line = reader.readLine()) != null); ) {
// TODO: Do something with the output, maybe.
}
} catch (IOException e) {
s_logger.log( Level.SEVERE, "Unexpected I/O exception reading from process.", e );
}
finally {
try {
if ( null != reader ) reader.close();
}
catch ( java.io.IOException e ) {
s_logger.log( Level.SEVERE, "Unexpected I/O exception closing a stream.", e );
}
}
}
}