2015-02-09 3 views
1

Я пытаюсь запустить исполняемый файл с его аргументом из java-кода. В консоли, когда я хочу запустить мой exe, пишу: >colorDescriptor 1.jpg --detector densesampling --ds_spacing 6 --ds_scales 1.2 --descriptor opponentsift --codebook CODEBOOK --output output.descr. Когда я попытался запустить этот исполняемый файл из Java Я использую следующий код:Вызов исполняемого файла из java-кода

String[] cmd = { "colorDescriptor.exe" , "1.jpg", " --detector densesampling --ds_spacing 6 --ds_scales 1.2 --descriptor opponentsift --codebook CODEBOOK ", " --output output.descr"}; 
    Process process = Runtime.getRuntime().exec(cmd);   
    waitF(process); 

Однако, кажется, не работает должным образом, я получил следующий вопрос: Warning: no output file to write to. Did you forget to specify --output? ли я делаю что-то неправильно, когда я звоню exe-файл?

+0

Использование ProcessBuilder. Сделка с потоками. – bmargulies

ответ

2

Каждый аргумент должен быть отдельной строкой в ​​String [] cmd; например:

String[] cmd = { "colorDescriptor.exe" , "1.jpg", "--detector", "densesampling", "--ds_spacing", "6", "--ds_scales", "1.2", "--descriptor", "opponentsift", "--codebook", "CODEBOOK", "--output", "output.descr"}; 
1

Вы должны предоставить команду либо в виде одной строки или массив строк, содержащий несколько строк, а затем оберните в примерочных поймать блок, как Exec (...) бросает исключение

Throws: 
SecurityException - If a security manager exists and its checkExec method doesn't allow creation of the subprocess 
IOException - If an I/O error occurs 
NullPointerException - If command is null 
IllegalArgumentException - If command is empty