Runtime.getRuntime()。exec()不起作用

时间:2013-10-23 05:30:48

标签: java windows cmd

尝试使用Java启动视频文件时,我有一种奇怪的行为。

以下是代码:

File f = new File("Y:\AAA\DVD2013_GDL_(SEP)\Videos\0005000po8jy.mpg");
String[] cmd = new String[3];
cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = "\""+f.getAbsolutePath()+"\"";
Runtime.getRuntime().exec(cmd);

出于某种原因,视频无法启动。将路径粘贴到cmd时,文件会毫无问题地启动。

现在,当我将路径更改为:

Y:\AAA\DVD2013_GDL_(SEP)\Video Dateien\0005000po8jy.mpg

以上代码有效。请注意,我只是将文件夹名称从“视频”更改为“视频日期”。

有人有想法,为什么我的代码在描述的情况下不起作用?顺便说一句,我使用的是Java 1.7。

编辑:我没有异常,也没有冻结或其他奇怪的行为。

感谢您的帮助, klib

4 个答案:

答案 0 :(得分:1)

使用Runtime.getRuntime().exec(),您只能执行executable文件(例如cmdbatexe等。) mpg不是可执行文件,mpg文件由其他工具读取 你应该用另一种方式打开它,例如

Descktop.getDesktop().open(new File("Y:\AAA\DVD2013_GDL_(SEP)\Videos\0005000po8jy.mpg"))

答案 1 :(得分:0)

When Runtime.exec() won't。此外,这些天您应该使用ProcessBuilder,因为它更容易使用。

答案 2 :(得分:0)

您需要启动播放器并将路径传递给文件作为参数。 E.g。

    Runtime.getRuntime().exec("C:\\Windows\\default_player_name.exe -param_name D:\\file_name.mpg");

阅读播放器手册,了解您想要的内容(输入文件的方式)。

P.S。还有一个好主意:创建'.bat'(如果你编写windows代码)脚本,用于执行带参数的programm,下次执行这个批处理文件。

答案 3 :(得分:0)

当您将文件夹的名称从Videos更改为Video Dateien时,它的工作原理似乎表明底层文件夹名称与显示的文件夹名称不同。

基础目录名为Video Dateien,而不是Videos。该目录中有一个desktop.ini文件,它将目录的本地化名称设置为Videos

CMD或java都不了解文件夹的本地化名称,它只是一个探索者的概念。

当您使用Desktop.open时,它会将explorer的开头移开,它会理解并翻译本地化的目录名称。

一般情况下,我绝不会将本地化的文件名放入这样的应用程序中,因为它只是在寻找麻烦。