我尝试通过Java命令shell从Java启动一个程序,遇到我自己无法解决的错误。我使用ProcessBuilder将参数传递给命令shell。
段:
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,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 :(得分:1)
如果您的路径包含空格,则需要双引号(\"
):
list.add("\"C:\\Program Files (x86)\\TightVNC\\tvnserver.exe\" -controlservice -connect 172.20.242.187");