• 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 的版本保持一致!
  • 相关阅读:
    USACO6.4-The Primes
    ZOJ2112--Dynamic Rankings (动态区间第k大)
    Havel定理
    HDU5107---K-short Problem (线段树区间 合并、第k大)
    POJ2104-- K-th Number(主席树静态区间第k大)
    poj2409 & 2154 polya计数+欧拉函数优化
    CodeForces
    HDU
    HDU
    Gym
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/13282619.html
Copyright © 2020-2023  润新知