2015-06-03 2 views
2

Мне нужно вызвать внешнюю программу с Java, например ImageMagick's convert. Он не работает в Windows, если я не поставил cmd /c перед фактической командой.Межплатформенный способ запуска внешнего процесса из java?

String source = "test.jpg"; 
String result = "test-thumbnail.jpg"; 
ProcessBuilder builder = new ProcessBuilder().command("cmd", "/c", "convert", source, "-thumbnail", "295x", result); 
Process process = builder.start(); 

Как избежать использования cmd /c так, что мой код работает на ОСАХ, отличный Windows?

Без cmd /c я попадаю в очень похожую проблему, как описано здесь: running imagemagick convert (console application) from python - что существует родную Windows, convert.exe который вызывается вместо ImageMagick-х convert.exe. Кажется, что PATH не выбрано окружением дочернего процесса.

Я дважды проверил, что моя система PATH имеет каталог ImageMagick до C:\Windows\system32. Также сама команда отлично работает, когда я ввожу ее в командную строку Windows.

+0

Просто для целей отладки, попробуйте в C: \ Windows \ System32 и переименовать 'convert.exe' как' msconvert.exe' –

ответ

1

Вы можете проверить ОС.

private static String OS = System.getProperty("os.name") 
+0

Да, ну, это будет работать, но я хотел бы понять, почему ' cmd/c' требуется в первую очередь? – stys

+0

Я не уверен в этом, но я думаю, что, хотя команды un linux являются основной программой ОС, на окнах cmd - это еще одна программа. –

Смежные вопросы