2014-12-09 5 views
1

Я пытаюсь запустить программу из командной оболочки Windows из Java и испытывать ошибки, которые я не могу решить самостоятельно. Я использую ProcessBuilder для передачи аргументов командной оболочки.Java ProcessBuilder игнорирует пробелы

Отрывок:

try{ 
     List<String> list = new ArrayList<String>(); 
     list.add("cmd.exe"); 
     list.add("/c"); 
     list.add("C:\\Program Files (x86)\\TightVNC\\tvnserver.exe -controlservice -connect 172.20.242.187"); 
     ProcessBuilder builder = new ProcessBuilder(list); 
     System.out.println(builder.command()); 
     builder.redirectErrorStream(true); 
     Process p = builder.start(); 
     BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 
     while(true){ 
      line = r.readLine(); 
      if(line == null) { break; } 
      System.out.println(line); 
     } 
} catch {...} 

Моя проблема заключается в том, что пробелы в пути к программе игнорируются. Консольный вывод:

[cmd.exe,/с, C: \ Program Files (x86) \ TightVNC \ tvnserver.exe -controlservice -connect 172.20.242.187] Der Befehl "C: \ Program" IST entweder falsch geschrieben oder konnte nicht gefunden werden.

(C: \ Program не может быть найден).

В Интернете я нашел подобные проблемы даже на StackOverflow и других веб-сайтов сделал это именно так, как я сделал, см пример на Run cmd commands through java с той разницей, я передал аргументы в виде списка, указанного в http://www.tutorialspoint.com/java/lang/processbuilder_command_list.htm

Так что я не понимаю, почему моя команда не работает. Я ценю любую помощь

Редактировать Мне нужно добавить путь динамически, поэтому я не могу передать аргументы при создании объекта ProcessBuilder.

+0

Попробуйте добавить двойные qoutes Arround ' "\" C: \\ Program Files (x86) \\ TightVNC \\ tvnserver.exe \ "-controlservice -connect' 172.20.242.187 " – Jens

ответ

1

двойные кавычки (\") необходимы, если ваш путь содержит пробелы:

list.add("\"C:\\Program Files (x86)\\TightVNC\\tvnserver.exe\" -controlservice -connect 172.20.242.187"); 
+0

Спасибо, это сделало это для меня! Я тоже пробовал это, но также и параметры в «Спасибо! – Drudge

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