2011-02-10 32 views
5

我正在使用ImageMagick的转换工具来转换在我的Java程序运行在Mac OS X中的图像。 我使用以下代码,我从here改编。ImageMagick转换退出状态133

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."); 
} 

然而,当我这样做,我得到的退出状态和下面的错误消息。我假设这与权限有关,因为当我从终端运行相同的命令时,它工作正常。

错误消息:

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,一切正常。

回答

3

虽然我无法找到任何关于133返回代码的信息,但我确实注意到您没有读取标准错误流/标准错误流。我建议阅读,看看ImageMagick是否给你一些更有用的输出。有一个问题here处理更复杂的Runtime.exec()方法的用例,但最好的基本方法是with this method

+0

哇,这很有道理,不能相信我没有想到它。谢谢!我会在今天尝试。 – DanielGibbs 2011-02-10 19:31:25

+0

啊哈!我现在有一个错误信息!以上更新。 – DanielGibbs 2011-02-10 20:20:53

0

您应该考虑使用jmagick,它向本地imagemagick库提供Java API。它比从Java应用程序产生新进程更有效。