我在获取外部脚本以从 OS X 10.8 上的 Java 应用程序运行时遇到实际问题。它适用于 Windows,所以不确定我在 OS X 上做错了什么。
什么有效(Windows):
String[] commands = {
"\"" + _appDataDir + "\\Temp\\Workers\\" + _batchName + "\"",
"\"" + _appDataDir + "\\Temp\\frame%d.jpg\"",
"\"" + _fileName + "\""};
proc = rt.exec(commands);
因此,对于 OS X,我有以下内容:
String[] commands = {
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""};
proc = rt.exec(commands);
这在文件名中没有空格时有效,但当有空格时出现“java.io.IOException:错误的文件描述符”错误时会失败。
目前,我已将所有路径更改为没有空格作为一个简单的修复,但我无法控制 fileName 字符串,因为这是用户从保存对话框中选择的。我尝试过在 fileName 周围使用和不使用双引号,但都没有任何区别。
我还尝试了 ProcessBuilder 如下(有和没有“/bin/bash/,-c”位):
ProcessBuilder proc2 = new ProcessBuilder(
"/bin/bash",
"-c",
_appDataDir + "/Temp/Workers/" + _batchName,
_appDataDir + "/Temp/Workers/mac-ffmpeg",
_appDataDir + "/Temp/frame%d.jpg",
"\"" + _fileName + "\""
);
proc = proc2.start();
但这给出了同样的错误。据我所知,我正在做其他类似问题中建议的所有事情,但没有任何效果。任何想法,将不胜感激!