java -version和javac -version显示不同的版本

我在我的Windows系统上安装了java 7java 8 ,在C:\Program Files\Java

在环境的路径中,我像这样指定了java 7的路径。

%JAVA_HOME%/bin其中JAVA_HOME = C:\Program Files\Java\jdk1.7.0_17

但是当我输入javac -version它显示了javac 1.7.0_17 ,这是有道理的

但是当我做java -version它会显示出来

 java version "1.8.0" Java(TM) SE Runtime Environment (build 1.8.0-b132) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode) 

在此处输入图像描述

知道这可能是什么问题吗?

编辑已安装的文件夹: 在此处输入图像描述

还有一件事, echo %PATH%只有一次出现JDK ,这是针对java 7而且没有发现JRE

问题很可能是因为你的JDK之前的path有一个JRE 。 当我们在path添加JDK并且不删除以前添加的JRE时,通常会发生这种情况。 因此,当你执行java它指向JRE,当你执行javac它指向另一个版本/ JDK(因为jre中没有javac)

编辑: – 由于您编辑了问题并且在路径中发布了没有任何JRE,您可以复制%JAVA_HOME%并将其首先粘贴到路径变量中(确保它在system32路径之前),我之前遇到过这个问题(同时安装android sdk)并做到这一点解决了它。

从这里也找到了可能的解释: –

JRE also puts a java.exe to c:\Windows\System32, that's how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable. If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.

好的,正如你所说的那样,你的路上没有JRE,我认为where java (如果你有Windows 7)会给你C:\Windows\System32\java.exe

改变java运行

尝试使用控制面板中的Java-Settings对话框更改当前处于活动状态的Java System Version。 这应该改变java -version返回的版本。 如果这不起作用,您可能需要重新安装要运行java命令的Java版本,明确指定路径,编写自己的包装器(如果与包装器位于同一目录中,则可以正常工作)或放置C:\Windows\System32\之前的JRE路径到您的路径上(不知道最后一个选项是否真的很好)。

包装器看起来像这样:

 @"C:\Program Files\Java\jre7\bin\java.exe" %* 

并且您可以将其命名为java.bat (如果您在同一目录中它将起作用,或者在C:\Windows\System32\java.exe之前将其放在PATH ,或者您可以将其命名为java7.bat并将其放在任何位置如果您愿意,可以运行Java 7 JRE。

如果要在运行时更改JAVA_HOME ,则包装器也是一个不错的选择。

改变javac运行

如果你想运行一个不同的javac命中Windows + Pause并打开系统对话框来更改PATH那么它包含JDK 8的路径而不是你的JDK 7.你需要重新启动命令行才能显示更改。

要解决这种环境问题,我总是相信命令whereis,在windows下载whereis.exe然后在路径中设置并执行命令

where.exe是java.exe

哪里是javac.exe

您将很容易找到在环境中调用java的位置的确切路径以及javac。

jre7你编写javac ,它正在从jre7获取当前正用于开发目的的值,当你编写java version ,它从jre8获取version的值,当前正在使用它在您的系统上安装了应用程序,因为您在用于开发的jre7之前提到了系统的JRE

进入程序或执行系统调用后,系统首先查看当前目录,然后在PATH ,在与命令对应的可执行文件上从左到右检查每个目录。 当系统找到可执行文件时,运行它(停止查找)。

您在JRE之前已在PATH环境变量中预安装了系统JRE,这是您需要的。

是的,确实,为了处理不匹配的版本,我们需要修改PATH变量,而where命令(至少在Windows中)非常方便找出首先选择哪个程序。 然而,有一个转折:例如,当你在跑步后看到你的PATH var的内容时,

 echo %path% > path.txt 

你应该知道PATH实际上由两个部分组成:一个是系统路径 ,另一个是当前用户路径 ,它是首先被评估但最后打印的系统路径 。 因此,只要在系统路径中的某个地方存在旧版本的另一个地方,只需在一切之前为您的全新JDK设置一条路径就行了。

当您有诸如的条目时,这个特殊问题尤为常见

 C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath 

在您的系统路径中 。 只需将它们移动到当前用户路径部分的尾部,即可使这些条目成为搜索队列中的最后一个条目。