java - 在java中使用进程生成器运行批处理文件时出现奇怪的问题

标签 java process batch-file processbuilder

我有以下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;
        }
    }

最佳答案

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

关于java - 在java中使用进程生成器运行批处理文件时出现奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14368285/

相关文章:

java - 访问实例变量或局部变量

java - 什么是 RecyclerView.Adapter<MyAdapter.MyViewHolder> 以及它与 Android 中的 RecyclerView.Adapter 有何不同?

C# - 从现有进程中读取文本

java - Windows bat 文件确定 Java 安装是 32 位还是 64 位?

windows - 添加右键单击上下文菜单以调用 RAR 命令,管道到剪贴板?

java - 使用 Spring IoC 在两个表单之间共享 java 对象

java - 单例类中成员变量的单个副本

process - 乘客进程已经在运行?但它不是

java - 在内存文件中作为在 Linux 上的 Java 中处理的参数

windows - EC2 Windows 实例重启后不从启动文件夹启动批处理文件