0

我有以下运行批处理文件的java代码片段(根据标志重命名文件)。此代码正常工作。但是,当我评论该行时while( isRunning(p) ) {},它就不起作用了。任何人都可以给出任何理由吗?

public static void main(String[] args) throws IOException, InterruptedException {
        ProcessBuilder pb = new ProcessBuilder(  fileManipulatorScriptLocation, "Rename_File", "a.txt", "b.txt" );
        pb.directory( new File(targetDirectory) );
        Process p = pb.start();
        while( isRunning(p) ) {}
    }

    public static boolean isRunning(Process process) {
        try {
            process.exitValue();
            return false;
        } catch (IllegalThreadStateException e) {
            return true;
        }
    }
4

2 回答 2

4

而不是忙着等待的无限循环,使用Process#waitFor. 为什么它不起作用:您的父进程(Java)立即死亡,并拖着子进程。

于 2013-01-16T21:40:23.880 回答
0

isRunning()检查Process#exitValue().

javadoc

返回子进程的退出值。

返回:此 Process 对象表示的子流程的退出值。按照惯例,值 0 表示正常终止。

抛出: IllegalThreadStateException - 如果此 Process 对象表示的子进程尚未终止。

意味着,如果进程仍在运行,则在方法IllegalThreadStateException内部抛出,但异常被捕获,所以方法 return ,否则返回进程存在值和方法 return打破循环。isRunning()trueexitValue()isRunningfalsewhile

于 2013-01-16T21:45:54.130 回答