Java でのランタイムを使用したコマンド ライン呼び出しの成功について、Michael C. Daconta によるすばらしいブログ投稿があります。あなたが思うほど簡単ではありません!
そのブログ投稿から抜粋した次のコードは、「MediocreExecJava」を説明しています。これは、Runtime.exec() を使用してプログラムを正常に実行し、ハングすることなく入出力を管理するクラスです。私は以前にそれを使用しましたが、うまくいきます。理由を理解するために投稿を読むことを強くお勧めします!
import java.util.*;
import java.io.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}