我做了一个小程序,它工作得很好,但是现在。首先,它在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,用于为进程设置环境、工作目录和重定向流。