Exec不工作与Java 1.7.21,但在netbeans工作得很好



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

Oracle在Java 7 update 21(和6 update 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声明:

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

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

相关内容

最新更新