2011-02-10 30 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應用程序產生新進程更有效。