2014-01-05 3 views
1

Я использую Process Builder для запуска команд ImageMagick в Windows. По какой-то причине с Process Builder выходные изображения не генерируются в большинстве случаев. Когда я попробовал ту же команду, используя Runtime.getRuntime().exec, был сгенерирован вывод. Любая идея, почему это так?Process Builder не работает в Windows

String input="D:\\Koala.jpg"; 
String output = "D:\\ProcessBuilderOutput\\KoalaPNG.png"; 
commands.add("D:\\Program Files\\ImageMagick-6.8.6-Q16\\convert"); 
commands.add("-alpha off"); 
commands.add("-strip"); 
commands.add(input); 
commands.add("-colorspace CMYK"); 
commands.add(output); 
try{ 
    executeProcessCommand(commands); 
    if(new File(output).exists() != true){ 
    System.out.println("output not generated"); 
    } 
}catch (Exception e) { 
    e.printStackTrace(); 
} 
public static void executeProcessCommand(List<String> commands) throws Exception { 
    Process proc = null; 
    try { 
     System.out.println("-executeProcessCommand: Trying to execute :- "+commands); 
     ProcessBuilder processBuilder = new ProcessBuilder(commands); 
     proc = processBuilder.start(); 
     proc.waitFor(); 
     System.out.println("- executeProcessCommand: Executed the command "); 
    } catch (Exception e) { 
     System.out.println(" - executeProcessCommand:" + e.getMessage()); 
    } finally { 
     try { 
      if(proc != null) 
       proc.destroy(); 
     } catch (Exception e) { 
      System.out.println("executeProcessCommand:"+ e.getMessage()); 
     } 
    } 
} 
+0

Не работает последовательно или вообще? Каковы ваши входные файлы? Что означает «не работает»? – chrylis

+0

@chrylis, Когда я попытался 10 раз, вывод генерируется только один раз ... В любом случае я отредактировал вопрос ... –

+0

Прочитайте (и внесите) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/jw-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и (продолжает) сборку' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. –

ответ

1

Разделить аргументы ProcessBuilder. В частности, разделить commands.add("-alpha off"); в

commands.add("-alpha"); 
commands.add("off"); 

и аналогично для commands.add("-colorspace CMYK");

+0

Я пробовал и не работает. –

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