等到调用jar执行完成

时间:2017-01-02 11:13:00

标签: java

在我的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但是我认为没有正确的方法等待其他进程完成。

2 个答案:

答案 0 :(得分:4)

就在Process documentation

  

<强> waitFor

public abstract int waitFor()
throws InterruptedException
     

如果需要,使当前线程等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

答案 1 :(得分:0)

如果只需要在jar执行完成后需要waitFor继续,那么使用main将是完美的解决方案。否则,您将看到某种进程间通信。尝试使用套接字在进程之间传递消息。