java could not open `C|D|E|F:\jre\lib\amd64\jvm.cfg' 解决方案与原因

因为安装了 jdk 后发现有多个 jre 一个是安装目录下的。
在这里插入图片描述
还有一个是安装后的自动安装的注意路径都不一样。
在这里插入图片描述
由于本人有强迫症所有不能容忍有两个 jre 目录的存在,所以果断删除了 D 盘下的。谨慎起见所以立马执行了 cmd java 命令,然后就凉凉,果断报错!
在这里插入图片描述
但是 javac 命令缺没有报错。
在这里插入图片描述

为什么会出现这个错误呢,我们安装 jdk 后已经配置了 path 变量啊。删除的 jre 也不是配置环境变量的路径啊。环境变量如下

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\git\cmd;D:\jdk\bin;D:\apache-maven-3.6.1\bin

明明配置的 D:\jdk\bin; 下面我们先说解决方法。只需要把我们配置的 D:\jdk\bin; 环境变量放在最左边在执行 java 即可。

注意:配置完环境变量一定要关闭 CMD 命令再重新打开才生效!

下面我们来执行结果是没问题的且当前我们 D 盘下是没有 jre 目录的。
在这里插入图片描述

问题解决了?但是为什么会这样呢?首先我们把环境还原到报错环境。

1.我们到底执行的是哪个 java.exe?我们先来 windows 全局搜索下到底有多少个 java.exe 文件。
在这里插入图片描述
居然出现了这么多个!那么我们在命令行里输入的 java 命令到底是执行的哪个?
  其实,软件运行时环境变量的查找是先在当前路径找,找不到后再在系统环境变量中查找,同时系统环境变量的查找是按照文件的顺序从前向后找的,最前面一条的优先级最高,如果找到了就不会再向后找。 那么我们再看下刚才我们的环境变量配置:

C:\Program Files (x86)\Common Files\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;D:\git\cmd;D:\jdk\bin;D:\apache-maven-3.6.1\bin

最左边的是 C:\Program Files (x86)\Common Files\Oracle\Java\javapath 这个目录正好对应我们搜索出来的第一个 java.exe。而我们自己安装的 jdk 确是在倒数第二个,根本没有被执行。所以要解决问题我们需要把自己的 jdk 路径配置在最左边即可

我们知道了执行 java.exe 了那么它是怎么寻找到要执行哪个 jre 呢?
  当我们在命令行输入 java 时。 java.exe 的工作就是找到合适的 jre 来执行是按如下顺序来寻找的

  1. 首先看自己当前目录下有没有 jre 目录。
  2. 看父目录下面有没有 jre 目录。
  3. 查询注册表中有没有 jre 目录(HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\)
    在这里插入图片描述
    在这里插入图片描述
    上面两个我都看了并没有当前目录和父目录下都不存在那么我们就来验证下第三个,打开注册表果然被找到了隐藏的太深了。
    在这里插入图片描述
    这个路径不就是被我删除的 jre 目录吗!顺带我们也发现了 jvm 原来 jvm 虚拟机就是一个 jvm.dll 文件。

好了到此所有谜团都已经解开了,原来安装一个 jdk 还有这么多小细节! 此次问题到此结束!欢迎有疑问或者不同意见的交流探讨。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值