1

我做了一个小程序,它运行良好,但现在。首先,它mux mkv文件中的xml章节文件,所以我们得到一个muxed mkv文件。前几天我将 java 更新到 1.7.21,我认为这就是为什么它现在不起作用的问题。这有点奇怪,但是当我在 netbeans 中运行时一切都很好,但是当我构建并运行 .jar 文件时,它就不起作用了。它会创建 xml 文件,但不会在 mkv 文件中创建 mux(并且因为没有 muxed 不会删除 xml 文件)。这是代码:(文件名=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位。对不起,我的英语不好。

4

1 回答 1

3

Oracle在 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();

正如甲骨文所说:

需要启动程序名称中带有空格的程序的应用程序应考虑使用Runtime.exec允许在数组中指定命令和参数的变体。

或者,自 JDK 5.0 以来创建操作系统进程的首选方法是使用java.lang.ProcessBuilder. ProcessBuilder 类具有更完整的 API 用于设置环境、工作目录和重定向流程的流。

于 2013-04-18T21:06:17.820 回答