我正在使用ImageMagick的转换工具转换我在Mac OS X上运行的Java程序中的图像。 我使用以下代码,我改编自here。
public static void convertToJPG(String originalFile, String newFile) throws Exception {
executeCommand("/usr/local/ImageMagick-6.6.7/bin/convert", originalFile, newFile);
}
private static void executeCommand(String... command) throws Exception {
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process p = pb.start();
int exitStatus = p.waitFor();
System.out.println(exitStatus);
if(exitStatus != 0)
throw new Exception("Error converting image.");
}
但是,当我这样做时,我的退出状态为 133 ,并显示以下错误消息。我假设这与权限有关,因为当我从终端运行相同的命令时,它工作正常。
错误讯息:
dyld: Library not loaded: /ImageMagick-6.6.7/lib/libMagickCore.4.dylib
Referenced from: /usr/local/ImageMagick-6.6.7/bin/convert
Reason: image not found
编辑:好的,所以事实证明我收到了上述错误消息,因为Java无法看到DYLD_LIBRARY_PATH
环境变量。所以我重新启动了Eclipse,一切正常。
答案 0 :(得分:4)
返回代码133 = 128 + 5 =<以信号>终止+ SIGTRAP
参见http://tldp.org/LDP/abs/html/exitcodes.html 以及“kill -l”的输出。
答案 1 :(得分:3)
虽然我无法找到有关133返回代码的任何内容,但我确实注意到您没有读取命令标准输出/标准错误流。我建议阅读,看看ImageMagick是否给你一些更有帮助的输出。有一个问题here处理Runtime.exec()方法的更复杂的用例,但最好的基本方法是with this method。
答案 2 :(得分:0)
您应该考虑使用jmagick,它为本机imagemagick库提供Java API。它比从Java应用程序生成新进程更有效。