在我的Java程序中,我启动了一个外部.jar文件,用于修改系统剪贴板内容。之后我继续将数据写入剪贴板。不幸的是,它看起来像jar启动,程序不会等到jar执行完成。
以下是我用来启动jar文件的代码:
import java.io.IOException;
public class JarExecutor {
private String pathToJar = "";
private String jarFile = "";
private String pathToJava = "C:\\ProgramData\\Oracle\\Java\\javapath\\javaw.exe";
public JarExecutor(String pathToJar, String jarFile) {
this.pathToJar = pathToJar;
this.jarFile = jarFile;
}
public void execute() {
ProcessBuilder pb = new ProcessBuilder(pathToJava, "-jar", pathToJar + jarFile);
try {
Process p = pb.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
来自主程序:
public static void main(String[] args) {
String pathToJar = "\\\\some\\net\path";
String jarFile = "externalProgram.jar";
JarExecutor myExecutor = new JarExecutor(pathToJar, jarFile)
myExecutor.execute();
[...]
}
只要我将Thread.sleep(ms)
与ms>放在一起在我的程序myExecutor.execute()
之后它运行了3000但是我认为没有正确的方法等待其他进程完成。
答案 0 :(得分:4)
<强>
waitFor
强>public abstract int waitFor() throws InterruptedException
如果需要,使当前线程等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。
答案 1 :(得分:0)
如果只需要在jar执行完成后需要waitFor
继续,那么使用main
将是完美的解决方案。否则,您将看到某种进程间通信。尝试使用套接字在进程之间传递消息。