[英]Runtime.exec can't work on JDK 7u25
将Java更新到最新版本7u25后,runtime.getruntime()。exec不再起作用。
//jhghai_w.filepath = "C:\\aucs\\data\\tmp.txt";
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec("CMD.EXE /C \"C:\\Program Files\\juman\\juman.exe \" -e < "+jhghai_w.filepath)
.getInputStream()));
我已经阅读了以下参考文献:JDK 7u25:由Runtime.exec更改引起的问题解决方案https://blogs.oracle.com/thejavatutorials/entry/changes_to_runtime_exec_problems
并尝试了如下修改:
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec("CMD.EXE /C \"C:\\Program Files\\juman\\juman.exe -e < \""+jhghai_w.filepath)
.getInputStream()));
和这个:
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec(new String[] {"cmd","/C" "C:\\Program Files\\juman\\juman.exe"-e < ",jhghai_w.filepath})
.getInputStream()));
和这个:
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec(new String[] {"cmd","/C" "C:\\Program Files\\juman\\juman.exe","-e“,”<",jhghai_w.filepath})
.getInputStream()));
和这个:
br = new BufferedReader(new InputStreamReader(Runtime.getRuntime()
.exec(new String[] {"cmd","/C" "\"C:\\Program Files\\juman\\juman.exe"","\"-e < \"",jhghai_w.filepath})
.getInputStream()));
我什至直接将“ jhghai_w.filepath”替换为“ C:\\ aucs \\ data \\ tmp.txt”。 但是,这是行不通的。 我的修改有什么问题?
出于实用目的,不建议您首先使用Runtime.exec()
。 最好改用ProcessBuilder
。 有很多 教程向您展示方法。
您应该将命令作为包含三个元素的String-Array传递给Runtime.exec()或ProcessBuilder:第一个命令为命令,第二个命令为“ / C”,第三个元素在cmd中执行:
String[] command = new String[3];
command[0] = "CMD.EXE";
command[1] = "/C";
command[2] = "\"C:\\Program Files\\juman\\juman.exe \" -e < "+jhghai_w.filepath;
ProcessBuilder pb = new ProcessBuilder(command);
pb.start();
另请参阅此博客文章,尤其是本节:
黄金法则:
在大多数情况下,cmd.exe具有两个参数:“ / C”和用于解释的命令。
编辑:更新的解决方案...。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.