我编写了一个简单的java程序来调用批处理文件。问题是,当我运行这个Java程序没有任何反应时,批处理文件不会被执行。但是当我在调试模式下逐行执行相同的程序时,批处理文件就会被执行。
我怀疑这里的问题是我的JVM在我的进程实际完成之前正在关闭。我可以放入Thread.sleep()但我不想这样做。 是否有其他方法可以完成我的流程,然后关闭JVM。
public static void main(String[] args) {
String batchFilePath = "D:\\MyDir";
String batchFileName = "callMe.bat";
executeBatchFile(batchFilePath, batchFileName);
}
public static void executeBatchFile(String filePath, String fileName) {
try {
List cmdAndArgs = Arrays.asList("cmd", "/c", fileName);
ProcessBuilder pb = new ProcessBuilder(cmdAndArgs);
pb.directory(new File(filePath));
Process p = pb.start();
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:2)
您可以使用ProcessBuilder的waitFor方法等待已启动的进程完成。以下是来自javadocs的waitFor
如果需要,导致当前线程等待,直到进程 由此Process对象表示已终止。此方法返回 如果子进程已经终止,则立即执行。如果 子进程尚未终止,调用线程将被阻塞 直到子进程退出。