java - exec 不适用于 java 1.7.21,但在 netbeans 中工作正常

标签 java netbeans jar runtime exec

我做了一个小程序,它运行良好,但现在。首先,它在 mkv 文件中 mux 了 xml 章节文件,所以我们得到了一个 muxed 的 mkv 文件。前几天我将 java 更新到 1.7.21,我认为这就是它现在不工作的原因。这有点奇怪,但是当我在 netbeans 中运行时一切都很好,但是当我构建并运行 .jar 文件时,它不起作用。它会创建 xml 文件,但不会在 mkv 文件中创建 mux(因为没有 muxed,所以不会删除 xml 文件)。下面是代码:(filename=xml文件路径;mkv=mkv文件路径)

    public void muxing() {
    try {
        Runtime rt = Runtime.getRuntime();
        Process p = rt.exec("c:\\Program Files\\MKVtoolnix\\mkvpropedit.exe --chapters \""+filename+"\" \""+mkv+"\"");
        if (p.waitFor()==0) {
            File xmlfile=new File(filename);
            xmlfile.delete();
        }
    }
    catch(Exception e) {
        System.out.println(e.getMessage());
    }
}

该程序适用于 java 1.6,我认为也适用于 1.7.17。 Win7 32 位。抱歉我的英语不好。

最佳答案

甲骨文做出了breaking changes到 Java 7 更新 21(和 6 更新 45)中的 Runtime.exec()

如果程序名包含空格,则需要在数组中指定命令和参数:

Process p = Runtime.getRuntime().exec(new String[] {
    "C:\\Program Files\\MKVtoolnix\\mkvpropedit.exe",
    "--chapters", "\""+filename+"\"", "\""+mkv+"\""});

另一种选择是使用 java.lang.ProcessBuilder:

Process p = new ProcessBuilder("C:\\Program Files\\MKVtoolnix\\mkvpropedit.exe",
    "--chapters", "\""+filename+"\"", "\""+mkv+"\"").start();

如 Oracle 所述:

Applications that need to launch programs with spaces in the program name should consider using the variants of Runtime.exec that allow the command and arguments to be specified in an array.

Alternatively, the preferred way to create operating systems processes since JDK 5.0 is using java.lang.ProcessBuilder. The ProcessBuilder class has a much more complete API for setting the environment, working directory and redirecting streams for the process.

关于java - exec 不适用于 java 1.7.21,但在 netbeans 中工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087745/

相关文章:

java - 如何在maven中捆绑第三方jar?

java - 在不中断 java 循环的情况下抛出异常

java - 从 jar 中搜索并提取文件。 java

java - 无法使用 dropwizard-core 类

netbeans - 如何关闭Netbeans中的当前行突出显示?

java - java.library.path 中没有 jsmile

Windows 8/10 上的 NetBeans IDE 扩展

java - 使用外部.jar在命令行中编译java程序

java - 面向 Java 开发人员的 Groovy 迁移

Java 代码没有相加并给出正确的输出