【问题标题】:Java need process to return when finishedJava需要进程在完成后返回
【发布时间】:2015-02-08 09:52:52
【问题描述】:

我的问题需要 2 个问题,但我会尽量简短。所以我需要启动一个bat文件。现在我这样做:

public static void check() throws InterruptedException{
    try {
        Runtime.getRuntime().exec("cmd /c start build.bat");
        Thread.sleep(3000);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

bat 文件启动 java 编译器以编译另一个 java 文件并将错误消息定向到 txt 文件。这是bat文件的样子:

@echo off
javac -Xstdout error.txt MainApp.java
exit

现在的问题是,我必须包含 3 秒的睡眠,以确保 error.txt 已创建并充满错误。这是非常不满意的。我要么需要 bat 文件的返回值,所以程序的其余部分会等待,直到它完成 一种从程序中启动 java 编译器的方法 strong> 将错误消息直接写入 txt 文件。

谢谢大家。

【问题讨论】:

    标签: java batch-file javacompiler


    【解决方案1】:

    你可以使用Process#waitFor:

    如果需要,使当前线程等待,直到进程 此 Process 对象所代表的已终止

    Process p = Runtime.getRuntime().exec("cmd /c start build.bat"); 
    p.waitFor();
    

    【讨论】:

    • 我试过了,但程序并没有在这里停止。在蝙蝠创建了 txt 文件后,它正在被读取。我知道程序不会停止,因为我收到 FileNotFoundException, error.txt not found。
    • @user4542607 尝试在/c之后添加/wait,也不需要start,删除它。
    • /wait 不幸的是什么也没做。但是,删除 /start 会阻止 bat 文件启动。
    • 我必须纠正自己:删除start 还不错,但添加/wait 会使程序崩溃,因为bat 文件似乎正在等待,但java 程序没有。但是,现在waitFor() 似乎正在工作。这一切都很奇怪。
    猜你喜欢
    • 2018-12-02
    • 1970-01-01
    • 2013-12-17
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多