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 来执行是按如下顺序来寻找的
- 首先看自己当前目录下有没有 jre 目录。
- 看父目录下面有没有 jre 目录。
- 查询注册表中有没有 jre 目录(HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\)


上面两个我都看了并没有当前目录和父目录下都不存在那么我们就来验证下第三个,打开注册表果然被找到了隐藏的太深了。

这个路径不就是被我删除的 jre 目录吗!顺带我们也发现了 jvm 原来 jvm 虚拟机就是一个 jvm.dll 文件。
好了到此所有谜团都已经解开了,原来安装一个 jdk 还有这么多小细节! 此次问题到此结束!欢迎有疑问或者不同意见的交流探讨。
java could not open `C|D|E|F:\jre\lib\amd64\jvm.cfg' 解决方案与原因的更多相关文章
- jdk1.7安装,cmd下 java -version出现错误:“could not open `D:\Java\jre7\lib\amd64\jvm.cfg”
cmd 下java -version出现错误:“could not open `D:\Java\jre7\lib\amd64\jvm.cfg”,出现这种错误可能是由于先前有安装老版本jdk,之后将新版 ...
- 【Java】移动JDK路径后,修改环境变量不生效 Error: could not open `C:\Program Files\Java\jre1.8.0_131\lib\amd64\jvm.cfg'
场景: JDK原先装在C盘的,现在移动到了D盘,并在环境变量修改了%JAVA_HOME%的新路径,但是CMD中输入java后依然报错. Error: could not open `C:\Progra ...
- Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'
在运行cmd黑窗口时候出现:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'这样的错误的时候,本人没有删除任何文件,只是重新配置了一下jdk ...
- 更换JDK版本时的问题:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'
1.先把oracle自带的weblogic给卸载了,然后打开eclipse,发现报错了:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg' J ...
- 解决 :java -version出现错误:“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”
cmd 下java -version出现错误:“could not open `C:\Program Files\Java\jre7\lib\amd64\jvm.cfg”,出现这种错误可能是由于先前有 ...
- win10下JDK安装,配置环境变量后报Error: could not open `C:\Program Files\Java\jre1.8.0_112\lib\amd64\jvm.cfg'
把Path里面的%JAVA_HOME%/bin放在最前面.
- 解决 Error: could not open `C:\Program Files\Java\jre7\lib\i386\jvm.cfg'
解决 Error: could not open `C:\Program Files\Java\jre7\lib\i386\jvm.cfg' 重装JDK后,因为没有装在以前的目录,运行java命令后报 ...
- Error: could not open `C:\Java\jre7\lib\i386\jvm.cfg
打开eclipse时出现Error: could not open `C:\Program Files\Java\jre7\lib\i586\jvm.cfg’) 删除 c:\windows\syste ...
- Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg')
前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题.运行java -version出现Error: could not open `C:\Program ...
随机推荐
- delphi动态创建控件
动态创建控件 其实动态创建控件很简单,相信看过本文后你会全明白的. 1 先在单元的initialization 部分注册它,(这样在单元使用时会自动注册的)如: RegisterClass( TBut ...
- [NOI2016]区间 题解(决策单调性+线段树优化)
4653: [Noi2016]区间 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 1593 Solved: 869[Submit][Status][ ...
- error C3861: “L”: 找不到标识符
提示错误的语句:::CLSIDFromProgID(L("Shell.Application"), &clsid); 解决办法: 出现上面的错误是因为语法错误了,去掉字符串 ...
- MProtect使用小计【三】 – 权限管理
说明 本篇简单的说一下怎么样使用的VMProtect的权限管理功能,使我们的程序拥有注册码的功能.只用的注册版的程序才能执行指定的函数. 同样这个功能VMProtect也有例子位置在:安装目录\VMP ...
- 解决Python报错:local variable 'xxx' referenced before assignment(引)
解决Python报错:local variable 'xxx' referenced before assignment(引) 解决Python报错:local variable 'xxx' refe ...
- Awesome Adb——一份超全超详细的 ADB 用法大全
https://github.com/mzlogin/awesome-adb https://www.cnblogs.com/bravesnail/articles/5850335.html ...
- Java List T 去掉重复对象-java8
Stream语法详解 Stream当成一个高级版本的Iterator.原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作:高级版本的Stream,用户只要给出需要对其包含的元素执 ...
- netif_rx解析
netif_rx函数是在网上收到数据包后,通过中断机制通知CPU而间接调用的中断处理例程. 首先,会将Packet传给netpoll框架,该框架用于在网络协议栈不可用的情况下,也能够提供给内核一个收发 ...
- Java8向后兼容
toInstant()方法被添加到可用于将它们转换到新的日期时间的API原始日期和日历对象.使用ofInstant(Insant,ZoneId)方法得到一个LocalDateTime或ZonedDat ...
- 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象
8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...