• windows如何解决Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVersion'


    问题再现与解读

    • 首次,使用 java 命令+任意参数 都会报这个错误,最典型的就是java -version
    • 解读一下这个报错信息,注册表路径 SoftwareJavaSoftJava Runtime EnvironmentCurrentVersion 当前值是 1.8,但是 java 命令版本是 1.7

    问题解决

    方式一:删除C:WindowsSystem32下的java.exe, javaw.exe, javaws.exe

    方式二:修改环境变量顺序

    这是我原本的 Path 环境变量配置:

    %SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;%JAVA_HOME%in;
    

    修改后把%JAVA_HOME%in提前到%SystemRoot%system32;之前

    %JAVA_HOME%in;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;%SYSTEMROOT%System32WindowsPowerShellv1.0;
    

    问题分析过程

    环境变量

    Windows 中的 DOS 操作系统中的 Path 环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到 Path 中指定的路径去找。
    java 命令,其实是由系统根据 Path 环境变量路径寻找 java.exe 程序来运行。

    CMD - where 命令

    描述:显示符合搜索模式的文件位置。在默认情况下,搜索是在当前目录和 PATH 环境变量指定的路径中执行的。

    我们可以运行 where java 来查看
    where-java
    我的 java 1.8 安装在 D:libjdk1.8, 但是 %SystemRoot%system32(即对应C:WindowsSystem32) 优先于 %JAVA_HOME%in(即对应 D:libjdk1.8in)匹配,所以找到了 C:WindowsSystem32java.exe, 但是这是java 1.7的运行程序。

    运行 regedit 打开注册表

    点击 开始 --> 运行... --> 输入 regedit, 回车 --> 打开注册表
    找到 HKEY_LOCAL_MACHINESoftwareJavaSoftJava Runtime Environment, 就可以查看注册表属性了,我的 CurrentVersion 是 1.8

    总结

    1. 使用 regedit 查看注册表中的 CurrentVersion
    2. 使用 where java 查看路径
    3. 让注册表中的 CurrentVersion 和 where 命令找到的第一个 java.exe 的版本保持一致!
  • 相关阅读:
    div与>div区别小结
    自定义动画方法animate
    字符串与json之间的相互转化
    onclick事件与onserverclick事件
    jQuery实现隐藏标签
    CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Fileshelloiisceb8cab34db603d8App_global.asax.gr73hi-k.dll”--“拒绝访问。 ”
    关于迭代器中IEnumerable与IEnumerator的区别
    C#中部分方法返回值类型为什么只能是void?
    抽象函数与虚函数
    括号配对问题
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/13282619.html
Copyright © 2020-2023  润新知