如果不关闭Java应用程序,无法从Java启动外部程序

时间:2011-04-10 01:36:02

标签: java process runtime launch external-process

我正试图用我的java swing应用程序启动一个外部程序:

Process proc = Runtime.getRuntime().exec(cmd);

但是在我每次关闭我的java应用程序之前,外部程序实际上从未启动过。 它只在我关闭后等待启动。

我试图运行的外部程序是一个带参数的exe:

cmd = "externalProgram.exe -v --fullscreen --nowing";

这里可能有什么问题。 有趣的是,如果我尝试一些简单的事情,它会按预期工作:

Process proc = Runtime.getRuntime().exec("notepad.exe");

2 个答案:

答案 0 :(得分:6)

您可能需要先阅读流程的标准输出,或关闭标准输入,然后才能继续。对于读取输出,问题是缓冲区可能已满,阻塞程序;为了关闭输入,问题是某些程序会尝试从那里读取数据,如果它可用,等待这样做。这些技巧中的一个或两个很可能会为你解决问题。

答案 1 :(得分:2)

您还可以读取错误输出流以检查程序实际上是否未成功执行

String cmd = "svn.exe";
Process proc = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = null;
while((line=reader.readLine())!=null){
   System.out.println(line);
}
reader.close();

我的控制台显示

输入“svn help”以供使用。

显然,该程序是由Java执行的。