ImageMagick конвертировать статус выхода 133 - PullRequest
5 голосов
/ 10 февраля 2011

Я использую инструмент преобразования ImageMagick для преобразования изображений из моей Java-программы, работающей на Mac OS X. Я использую следующий код, который я адаптировал из здесь .

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, и все заработало.

Ответы [ 3 ]

4 голосов
/ 11 декабря 2012

Код возврата 133 = 128 + 5 = <прекращается сигналом> + SIGTRAP

См. http://tldp.org/LDP/abs/html/exitcodes.html и вывод "kill -l".

3 голосов
/ 10 февраля 2011

Хотя я не смог найти ничего о коде возврата 133, я заметил, что вы не читаете стандартный поток команд / поток ошибок.Я бы посоветовал прочитать это, чтобы увидеть, дает ли ImageMagick более полезный вывод.Есть вопрос здесь , который касается более сложных случаев использования метода Runtime.exec (), но лучший базовый способ сделать это - с этим методом .

0 голосов
/ 11 февраля 2011

Вам следует рассмотреть возможность использования jmagick , который предоставляет Java API для собственных библиотек imagemagick. Это более эффективно, чем порождение новых процессов из вашего Java-приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...