在win10下安装jdk后,命令行测试java出现could not open XXX\jvm.cfg
因为用matlab打包jar包需要,就按照教程安装了个jdk,但出现这个问题还是一脸懵。我安装的是1.7版本的,最开始是装的1.7.0_13,出现问题后我以为是太陈旧了,就卸载掉重新安装1.7.0_79。但还是出现了同样的问题。我报错前的环境变量时这样的:
画框的那两个就是我安装后新增的。
此时命令行javac没有报错,但是java会报错:
通过数次摸索,最后找到原因,是环境变量的顺序问题,把新增的两个jdk和jre放在环境变量的最前面,问题马上解决:
切记,环境变量修改后重新测试时一定要关闭命令再重新打开才生效
此时问题已解决。
。
那到底是什么原因呢?
其实,软件运行时环境变量的查找是先在当前路径找,找不到后再在系统环境变量中查找,同时系统环境变量的查找是按照文件的顺序从前向后找的,最前面一条的优先级最高,如果找到了就不会再向后找。
对于java来说,jdk(java development kit)是开发工具包,jre(java runtime environment)是运行环境。java命令的运行是肯定需要java环境的,也就是jre。与jre的bin目录最明显的区别就是jdk下才有javac,因为 jre只是一个运行环境而已,与开发无关。正因为如此,具备开发功能的jdk有自己的jre,同时这个jdk的命令位置是不会自动设置的,需要手动添加,然后它就会找到我们自己设置的位置jdk\bin,故javac一直都没有报错。而jre在安装的过程中会自动添加PATH,此时的path是在C:/windows/system32目录下,也就是下面的红框:
我们看到他是在最前面,所以当运行java时,他就会直接找到这个环境变量,不会再往下找我们设置的jre\bin了。所以java命令会出现错误。
为了验证以上猜想,我重新调整环境变量的位置,只把jre\bin放在SystemRoot\system32的前面,而把jdk\bin放在systemRoot\system32的后面,如图:
设置好后,重新打开命令行测试,测试java和javac都是没有问题的:
综上,jre在安装时会自动把命令的位置放在system32中,所以在环境变量中jre\bin一定要放在system32的前面,而jdk\bin的位置没有要求。
欢迎有疑问或者不同意见的交流探讨。