我使用以下代码执行批处理文件:
java.lang.Runtime rt = java.lang.Runtime.getRuntime();
Process pr = rt.exec("MyBatch.bat");
我的批处理文件需要一些时间才能执行。我希望我的servlet进程等到批处理文件执行完成。我想在执行批处理文件后关闭命令提示符。我怎么能这样做?
答案 0 :(得分:8)
使用Process.waitFor()
让您的线程等待批处理文件的执行完成。
java.lang.Runtime rt = java.lang.Runtime.getRuntime();
Process pr = rt.exec("MyBatch.bat");
pr.waitFor();
如果您需要访问控制台的输出和/或输入,您可能还想查看使用ProcessBuilder
而不是Runtime.getRuntime().exec()
。
答案 1 :(得分:3)
最直接的方法是使用您创建的流程对象的.waitFor()方法:pr.waitFor();
这是一个阻塞调用,这意味着在此调用返回之前不会执行其他代码。
答案 2 :(得分:1)
正如其他人所说,您可以使用Process.waitFor()。但是,在执行此操作之前,必须启动另一个不断读取进程输出和错误流内容的线程;否则,如果出现导致大量输出的错误,您的应用程序将会挂起。
或者,您可以让批处理文件将输出和错误重定向到文件。
答案 3 :(得分:0)
查看Process类的文档。
答案 4 :(得分:0)