Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ProcessBuilder查找Java版本_Java_Processbuilder - Fatal编程技术网

使用ProcessBuilder查找Java版本

使用ProcessBuilder查找Java版本,java,processbuilder,Java,Processbuilder,我试图使用Java来找出安装在机器上的Java版本。我有: List<String> commands = new ArrayList<String>(); commands.add("java.exe"); commands.add("-version"); ProcessBuilder pb = new ProcessBuilder(commands); pb.directory(new File("C:\\Program Files\\Java\\jdk1.6.0_

我试图使用Java来找出安装在机器上的Java版本。我有:

List<String> commands = new ArrayList<String>();
commands.add("java.exe");
commands.add("-version");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.directory(new File("C:\\Program Files\\Java\\jdk1.6.0_45\\bin"));
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

while ((s = stdInput.readLine()) != null) {
    System.out.println(s);
}
但是,当运行该命令时,由于stdInput为空,因此不会执行while循环。如果我取出commands.add-version,它将获得在命令行上运行java.exe命令时输出的输入,因此添加-version参数似乎会导致问题,这也表明目录和java.exe命令是正确的。任何帮助都将不胜感激

java-version的输出被发送到错误流-从该流读取应该得到正确的输出:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getErrorStream()));
或者,您可以调用redirectErrorStreamtrue来合并输入流和错误流。如果您只想打印到命令行,可以在ProcessBuilder上使用inheritIO

通过检索适当的

java版本打印到stderr。尝试使用:

ProcessBuilder pb = new ProcessBuilder(commands).redirectErrorStream(true);

这将使stderr与stdout处于同一个流中,您的其余代码看起来与现在一样。

有帮助吗?没有,请参阅@Copeg question。我正在编写一个可以在计算机上安装所有Java版本的程序,因此我无法使用此方法。我需要递归地查找已知的位置并运行java.exe-versionAhh,谢谢。。。为什么会发送到错误流??
ProcessBuilder pb = new ProcessBuilder(commands).redirectErrorStream(true);