我正在尝试从我的 Java 应用程序执行一个进程,当我从控制台执行这个进程时它工作正常,但是当我执行 getRuntime().exec() 时它开始但永远不会结束,没有异常,没有退出值。我尝试执行的过程是 pdftops.exe,这是一个将 PDF 文件转换为 PostScript 的应用程序。当我尝试转换小文件(从 Java 执行)时,它工作正常,问题是转换可能需要更长时间(从 20 到 60 秒)的较大 PDF。我认为问题可能是执行时间太长。下面是调用程序的一段代码(命令行简化,input.pdf和output.ps放在我家目录下的一个文件夹里,pdftops.exe放在Desktop里):
String comando = "pdftops.exe input.pdf output.ps";
System.out.println("Executing "+comando);
try {
Process pr = Runtime.getRuntime().exec(comando);
pr.waitFor();
System.out.println("Finished");
}
catch (IOException ex){
ex.printStackTrace();
}
catch(InterruptedException ex){
ex.printStackTrace();
}
编辑:阅读过程的 ErrorStream 解决了这个问题:
try {
System.out.println(comando);
Process process = Runtime.getRuntime().exec(comando);
String line;
InputStream stderr = process.getErrorStream ();
BufferedReader reader = new BufferedReader (new InputStreamReader(stderr));
line = reader.readLine();
while (line != null && ! line.trim().equals("--EOF--")) {
System.out.println ("Stdout: " + line);
line = reader.readLine();
}
}
catch (IOException ex){
ex.printStackTrace();
}