java代码需要控制外部应用程序:启动应用程序,等待应用程序完成并读取获得的结果(写入文本文件)。 我尝试过使用ProcessBuilder:
public class ExecuteNastran {
public static void main(String argv[]) {
List<String> command = new ArrayList<String>();
command.add("C:\\MSC.Software\\MSC.Nastran\\bin\\nastranw.exe");
command.add("C:\\Users\\user\\Desktop\\BRUTE-FORCE\\FLAP-TEST-SOL101-TEST-CORRELATION.bdf");
try {
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\Users\\user\\Desktop\\BRUTE-FORCE\\"));
Process p = builder.start();
p.waitFor(); //Returns inmediatly
//Process the results which is a text file
}
catch (Exception err) {
err.printStackTrace();
}
}
}
waitFor方法的API文档说:
*
public abstract int waitFor()throws InterruptedException导致 当前线程等待,如果有必要,直到表示的进程 此Process对象已终止。如果,此方法立即返回 子进程已经终止。如果子进程还没有 终止后,调用线程将被阻塞,直到子进程 退出。返回:由此表示的子进程的退出值 过程对象。按照惯例,值0表示正常 终止。
*
问题是进程p返回0(正常终止)inmediaty,而extrenal应用程序(在这种情况下是MSC Nastran)仍在运行。
https://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html?page=2中显示的解决方案是关于从外部进程读取流,但我的目的是读取外部进程完成后生成的文件。