Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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
显示不同版本的java-version和javac-version_Java - Fatal编程技术网

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

显示不同版本的java-version和javac-version,java,Java,我在windows系统上的C:\Program Files\java下安装了java 7和java 8 在环境的路径中,我指定了java7的路径,如下所示 %JAVA\u HOME%/bin其中JAVA\u HOME=C:\Program Files\JAVA\jdk1.7.0\u 17 但是当我键入javac-version时,它会显示javac1.7.0_17,这是有意义的 但是当我执行java-version时,它会显示 java version "1.8.0" Java(TM) SE R

我在windows系统上的
C:\Program Files\java
下安装了
java 7
java 8

在环境的路径中,我指定了
java7
的路径,如下所示

%JAVA\u HOME%/bin
其中
JAVA\u HOME=C:\Program Files\JAVA\jdk1.7.0\u 17

但是当我键入
javac-version
时,它会显示
javac1.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
中,那就是
java7
,而
JRE
中没有出现,它是从
jre7
中获取的值,您当前正在使用该值进行开发,并且在编写
java版本
时,它从
jre8
中获取
版本的值,该版本目前正由系统上已安装的应用程序使用,因为在用于开发的
jre7

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

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

这一方法有效的一个可能原因是:

JRE还将
java.exe
放入
c:\Windows\System32
,这就是第一个命令的解析方式。第二个命令由
PATH
变量中的
C:\Program Files\Java\jdk1.7.0\u 02\bin
条目解析。 如果(以及当)在命令提示符下进行开发,则必须调整
路径
变量,使
C:\Program Files\Java\jdk1.7.0\u 02\bin
位于
C:\Windows\System32
之前


为了解决这样的环境问题,我始终相信指挥权在哪里, 要在windows下载中执行相同操作,请在路径中设置并执行命令

java.exe在哪里

javac.exe在哪里


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

好的,正如您所说,您的路径上没有JRE,我假设这将为您提供
C:\Windows\System32\java.exe

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

包装器可以如下所示:

@"C:\Program Files\Java\jre7\bin\java.exe" %*
您可以将它命名为
java.bat
(如果您在同一目录下,它将在该目录下工作,或者将它放在
C:\Windows\System32\java.exe
之前的
PATH
中,或者您可以将它命名为
java7.bat
并将其放在路径上的任何位置,以便在您希望运行Java7JRE的地方

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

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

是的,为了处理不匹配的版本,确实需要o修改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
在您的系统路径中。只需将它们移动到当前用户路径部分的尾部,使这些条目成为搜索队列中的最后一个条目。

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

所以我只是系统变量中删除
C:\ProgramData\Oracle\Java\javapath\U jdk8


//或者将其放在javapath_jdk11下方,转到windows计算机中的环境变量。 在用户变量中:确保设置 -将用户变量“JAVA\u HOME”值设置为“C:\Program Files\JAVA\jdk xxxx\bin” 其中“jdk xxx”是您的jdk版本

在系统变量中: -添加相同的“C:\ProgramFiles\Java\jdk xxx
sudo update-alternatives --config java
    Selection    Path                                          Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/javac   1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode
sudo update-alternatives --config java
      Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode