因为安装了 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 还有这么多小细节! 此次问题到此结束!欢迎有疑问或者不同意见的交流探讨。

java could not open `C|D|E|F:\jre\lib\amd64\jvm.cfg' 解决方案与原因的更多相关文章

  1. 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,之后将新版 ...

  2. 【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 ...

  3. Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'

    在运行cmd黑窗口时候出现:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg'这样的错误的时候,本人没有删除任何文件,只是重新配置了一下jdk ...

  4. 更换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 ...

  5. 解决 :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”,出现这种错误可能是由于先前有 ...

  6. win10下JDK安装,配置环境变量后报Error: could not open `C:\Program Files\Java\jre1.8.0_112\lib\amd64\jvm.cfg'

    把Path里面的%JAVA_HOME%/bin放在最前面.

  7. 解决 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命令后报 ...

  8. 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 ...

  9. Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg')

    前些日子装了个jdk7试了试,后来做项目需要换成jdk6,安装完jdk6,设置完环境变量后出现问题.运行java -version出现Error: could not open `C:\Program ...

随机推荐

  1. Java桌球小游戏

    版本一.出现窗口package cn.xjion.game;/** * 出现窗口 * @author xjion * */import java.awt.*;import javax.swing.*; ...

  2. 破解极验(geetest)验证码

      破解极验(geetest)验证码 这是两年前的帖子: http://www.v2ex.com/t/138479 一个月前的破解程序,我没用过 asp.net ,不知道是不是真的破解了, demo ...

  3. 一道腾讯面试题:如何快速判断某 URL 是否在 20 亿的网址 URL 集合中?布隆过滤器

    何为布隆过滤器 还是以上面的例子为例: 判断逻辑: 多次哈希: Guava的BloomFilter 创建BloomFilter 最终还是调用: 使用: 算法特点 使用场景 假设遇到这样一个问题:一个网 ...

  4. Devstack 多节点自动化部署

    本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...

  5. adis16405 配置

  6. python:异常处理及程序调试

    1.异常概述 在程序运行过程中,经常会遇到各种各样的错误.这些错误统称为“异常”,在这些一场中有的是由于开发者将关键词写错导致,这类错误产生的是SyntaxError.invalid syntax(无 ...

  7. Java中有趣的String、StringBuffer与StringBuilder

    String介绍 String类属于java.lang包中,String类是不可变类,任何对String的改变都会引发新的String对象的生成. 创建String的两种方式: 1.通过构造器创建:S ...

  8. gitnore文件修改生效方法

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog 当修改gitnore文件后,常常出现文件不生效的情况, ...

  9. Vue之获取用户当前所在省市

    今天小编给大家带来的是使用Vue获取用户所在城市,Vue是很强大的,给大家准备好现成的插件供大家调用,下面的Demo小编使用的是百度API. 首先我们从百度平台申请百度地图的秘钥,申请成功后我们将&l ...

  10. Mysql 主从限制数据库

    主库配置 # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/serv ...