有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在我的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 "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)

enter image description here

知道这里有什么问题吗

编辑安装的文件夹: enter image description here

还有一件事echo %PATH%只有一个JDK的出现,那就是java 7,而在其中没有发现JRE


共 (6) 个答案

  1. # 1 楼答案

    这个问题的出现很可能是因为你的PATH中有一个JRE,在你的JDK之前。这通常发生在我们在PATH中添加JDK,而不删除之前添加的JRE时。因此,当您执行java时,它指向JRE,当您执行javac时,它指向另一个版本/JDK(因为JRE中没有javac

    如果路径中没有任何JRE,那么可以复制%JAVA_HOME%并首先将其粘贴到path变量中(确保它位于system32路径之前)

    这种方法之所以有效,一个可能的原因是explained in this answer

    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.

  2. # 2 楼答案

    好的,正如你所说,你的道路上没有JRE,我假设^{} (if you have Windows 7)会给你C:\Windows\System32\java.exe

    更改运行的java

    尝试使用“控制面板”中的“Java设置”对话框更改当前处于活动状态的Java系统版本。这应该会改变java -version返回的版本。如果这不起作用,您可能需要重新安装Java版本,运行java命令,显式指定路径,编写自己的包装(如果您与包装在同一目录中,它就可以工作),或者将JRE路径放在C:\Windows\System32\之前的路径上(不知道最后一个选项是否正确)

    包装纸可以是这样的:

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

    你可以把它命名为java.bat(如果你在同一个目录下,它会工作的地方,或者把它放在PATH之前C:\Windows\System32\java.exe),或者你可以把它命名为java7.bat,把它放在你路径上的任何地方,如果你想运行Java 7 JRE的话

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

    更改运行的javac

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

  3. # 3 楼答案

    为了解决这样的环境问题,我一直相信命令在哪里, 要在windows中执行相同操作,请下载whereis.exe,然后在path中设置并执行命令

    whereis java.exe

    whereis javac.exe

    您将很容易找到java在环境中被调用的确切路径,以及关于javac的路径

  4. # 4 楼答案

    我的箱子(移动jdk8->;jdk9->;jdk11)我有一个垃圾箱 由路径中的jdk8留下(在JAVA_主页:“C:\PATH\java11”之前)

    所以我只是从系统变量中删除C:\ProgramData\Oracle\Java\javapath_jdk8

    //或者把它放在javapath_jdk11下面

  5. # 5 楼答案

    转到windows计算机中的环境变量。 在用户变量中:确保设置 -将用户变量“JAVA_HOME”值设置为“C:\Program Files\JAVA\jdk xxxx\bin” 其中“jdk xxx”是您的jdk版本

    在系统变量中: -将相同的“C:\Program Files\Java\jdk xxxx\bin”值添加到“Path”变量中。 确保将附加值移到所有值之上

    现在试着运行java-version和javac-version。 为我工作。:)Here i've linked my screenshot

  6. # 6 楼答案

    是的,为了处理不匹配的版本,我们需要修改PATH变量,是正确的,where命令(至少在Windows中)非常方便地确定首先选择哪个程序。 然而,有一个转折点: 例如,当您在运行后查看yout PATH var的内容时

    echo %path% > path.txt
    

    您应该知道,路径实际上由两部分组成:一部分是系统路径,另一部分是当前用户路径,并且是系统路径首先得到评估,但最后打印出来。 因此,只要在系统路径中的某个地方有另一个使用旧版本的地方,简单地在所有东西前面放置一条通向全新JDK的路径将是无用的

    当您有以下条目时,这个特殊问题尤其常见:

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

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