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: Bad file descriptor」エラーで失敗します。
現時点では、簡単な修正としてすべてのパスをスペースを含まないように変更しましたが、ユーザーが保存ダイアログから選択するため、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();
しかし、これは同じエラーを出します。私が知る限り、他の同様の質問で提案されていることはすべて行っていますが、何も機能していません。どんなアイデアでも大歓迎です!