Java调用Runtime启动IE时控制台URL与地址栏显示不一致问题求解
问题根因
CMD命令的特殊字符解析规则导致URL被截断:&是CMD的默认多命令分隔符,直接拼接带&的URL到启动命令中时,CMD会将第一个&之后的内容识别为独立的新命令,不会传递给IE,因此最终IE地址栏只保留了第一个参数a=test。此外代码中存在字符串比较的逻辑错误,也可能引发其他异常。
解决步骤
- 给传递给IE的URL增加双引号包裹,同时适配
start命令的参数规则:start命令的第一个带引号参数会被识别为窗口标题,因此需要先加一个空的引号作为占位标题,避免URL被识别成标题丢失。修改后的启动命令格式如下:
Process p = Runtime.getRuntime().exec("cmd.exe /c start \"\" iexplore \"" + newUrl + "\"");
- 修正字符串比较逻辑:Java中
!=用来比较对象内存地址,对比字符串内容需要用equals()方法,将replaceUserID方法中的判断逻辑修改为:
if(!m.group(1).equals(username))
- 更稳妥的方案是使用
ProcessBuilder替代Runtime.exec,主动拆分命令参数,从根源避免特殊字符解析问题,示例实现:
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start", "", "iexplore", newUrl); Process p = pb.start();
内容的提问来源于stack exchange,提问作者Anon1234
相关产品推荐
相关产品推荐

