[英]Runtime.getRuntime().exec() does not work
尝试使用 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
使用Runtime.getRuntime().exec()
您只能执行executable
文件(如cmd
、 bat
、 exe
等)。
mpg
不是可执行文件, mpg
文件是由另一个工具读取的。
您应该以另一种方式打开它,例如
Descktop.getDesktop().open(new File("Y:\AAA\DVD2013_GDL_(SEP)\Videos\0005000po8jy.mpg"))
当 Runtime.exec() 不会。 此外,现在您应该更喜欢ProcessBuilder
,因为它更易于使用。
您需要启动播放器并将路径作为参数传递给文件。 例如
Runtime.getRuntime().exec("C:\\Windows\\default_player_name.exe -param_name D:\\file_name.mpg");
阅读您想要开始的播放器手册(如何在输入中获取文件)。
Ps 另一个好主意:创建“.bat”(如果您为 Windows 编写代码)脚本以执行所需的带有参数的程序,然后下次执行此批处理文件。
当您将文件夹名称从Videos
更改为Video Dateien
时它起作用的事实似乎表明底层文件夹名称与显示的文件夹名称不同。
底层目录称为Video Dateien
,而不是Videos
。 该目录中有一个desktop.ini
文件,该文件将目录的本地化名称设置为Videos
。
CMD 或 java 都不理解文件夹的本地化名称,它是一个资源管理器唯一的概念。
当您使用Desktop.open
时,它会将打开权交给explorer
,它会理解并翻译本地化的目录名称。
一般来说,我永远不会将本地化文件名放入这样的应用程序中,因为它只是自找麻烦。
在这种情况下,命令将是“开始”,因此用于打开文件
Runtime.getRuntime().exec("cmd /C start \"\" file.mpg");
除了启动程序之外,对于 Runtime exec 的其他用途,值得一读经典文章(也在 Kayman 的回答中)
关于 java Runtime exec 的陷阱
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.