因为安装了 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. 基础(三):yum(RedHat系列)和apt-get(Debian系列 )用法及区别

    文章转载来自:http://blog.csdn.net/chengly0129/article/details/70169760 一般来说著名的linux系统基本上分两大类:1.RedHat系列:Re ...

  2. 创建一个apk:按钮-click-文字display,测试apk;安装在真机进行调试的方法

    问题引入: 怎么样在一个app做event事件?例如touch操作,滑动操作,和按键事件(back,home等) 回答1:device.touch(x,y) ---获取device对象,然后touch ...

  3. [NOIP模拟14]题解

    当垃圾已经成为一种常态233333 A.旋转子段 考场上的$n^2$手残少了20分,555  (主要是因为实在打不出来$n^3$的做法所以写不了对拍?ccc为什么考场上没有想起有reverse()这么 ...

  4. linux python3 venv 虚拟环境报错 [-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 2.

    解决办法: 先创建没有pip的虚拟环境,然后启动虚拟环境后,再安装pip 办法一: 亲测失败了... python3 -m venv --without-pip py36env 办法二 sudo ap ...

  5. 使用ansible远程管理集群

    使用ansible远程执行命令 1.ansible简介 ansible的官方定义:"Ansible is Simple IT Automation"--简单的自动化IT工具.这个工 ...

  6. HTML5自定义属性的设置与获取

    <div id="box" aaa="bbb" data-info="hello"></div> <body& ...

  7. VS2015 定时服务及控制端

    一.  服务端 如下图—新建项目—经典桌面—Windows服务—起名svrr 2. 打到server1 改名为svrExecSqlInsert 右击对应的设计界面,添加安装服务目录结构如图 3. sv ...

  8. 【POJ】2031 Building a Space Station

    题目链接:http://poj.org/problem?id=2031 题意:修建太空站每个舱之间的走廊.每个舱都是球体.给出n个舱的三维空间坐标以及球体半径.如果球体之间接触或者相接,就不用修走廊. ...

  9. winfrom创建转圈等待窗体

    第一步:创建一个WaitForm public partial class WaitForm : Form { ; private ArrayList images = new ArrayList() ...

  10. Java的GC是什么?做了什么?

    Java GC是Java的垃圾回收机制 Java堆是被所有线程共享的一块内存区域,所有对象实例和数组都在堆上进行内存分配.为了高效的进行垃圾回收,虚拟机把堆内存分为新生代,老年代和永久代3个区域 新生 ...