1

将 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“,”&lt;",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”。但是这些都不起作用。我的修改有什么问题?

4

2 回答 2

1

你不应该Runtime.exec()开始使用,出于实际目的已弃用。最好改用ProcessBuilder. 有很多教程可以向您展示方法。

于 2013-09-03T16:45:25.743 回答
1

您应该将命令作为具有三个元素的 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”和解释命令。


编辑:更新的解决方案....

于 2013-09-04T08:40:37.433 回答