因JDK版本冲突导致问题的一系列解决方案
来源:互联网 发布:mac弱点设计cad 编辑:程序博客网 时间:2024/06/05 11:44
日常做系统应用时,经常会在服务器上安装各种各样的用到JRE的软件,有些软件还自带虚拟机或者JDK,Windows系统通过注册表来管理当前系统所使用的虚拟机和JDK路径,因此,当安装的软件JDK版本和windows已经安装的版本不一致时,若安装软件操作了注册表,就会出现各种各样的问题。其中一个,就是“载入JAVA VM时windows出现错误:3”,其他的错误,大同小异,基本都是版本冲突导致的问题,若要解决类似的问题,先要从系统的JAVA虚拟机管理说起:
首先,需要缺保以下三个键值中关于虚拟机的版本描述数据是一致的,若不一致,修改为一致。
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
当JAVA.EXE运行时,其有一套JVM的加载机制,机制是这样的:
假如存在../jre/bin/java.dll文件,则查找../jre/lib/ jvm.cfg文件,在该文件中,第1个被列出的jvm.dll类型作为缺省值(假如在java.exe命令行指定了jvm.dll的类型,则使用指定类型)。jvm.dll类型分为hotspot,classic,server三种。假如不存在../jre/lib/jvm.cfg文件,则打印下面的错误信息:
Error: could not open 'c:\jdk1.3\jre\lib\jvm.cfg'
如不存在../jre/bin/java.dll(当运行的是winnt\system32\java.exe),则注册表将在此时发挥作用,HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ CurrentVersion键值所记录的实际上是winnt\system32\java.exe的版本值
Error: could not open 'c:\jdk1.3\jre\lib\jvm.cfg'
如不存在../jre/bin/java.dll(当运行的是winnt\system32\java.exe),则注册表将在此时发挥作用,HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\ CurrentVersion键值所记录的实际上是winnt\system32\java.exe的版本值
同时java.exe程序内部本身也有一个标识自身的版本值,java.exe根据自己内部的版本值和CurrentVersion值相比较:
1、如果发现两个值相等,则将在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\MainVersion.MicroVersion项下获取JRE所在目录及动态链接库,这两个键的名称分别是JavaHome和RuntimeLib,MainVersion表示主版本号,MicroVersion表示次版本号。
2、如果java.exe内部版本值和CurrentVersion不一致,则报类似以下的错误:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.X', but '1.Y' is required.
2、如果java.exe内部版本值和CurrentVersion不一致,则报类似以下的错误:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.X', but '1.Y' is required.
此时,若手工修改,基本上可以解决问题,但是最好的方法还是卸载以前的老版本JDK,重新安装新版本的JDK来保持各键值关联是一致的。
如果以上设定都无问题,但是在运行一些AnyWhere制作的安装包或者一些依赖JDK运行的软件时,报出“载入JAVA VM时windows出现错误:3”时,就要注意在系统变量设定中,是否有一些软件的JAVA运行路径在系统JDK运行路径之前,比如Oracle,安装后,会将自己的java.exe运行路径排在系统路径前,此时只要把系统的PATH路径设定,修改为系统路径在前,即可解决问题!
原文网址:http://blog.sina.com.cn/s/blog_7250360c0100lhm3.html
- 因JDK版本冲突导致问题的一系列解决方案
- 因部署版本不一致导致的WEB和手机端APP数据冲突混乱问题
- 关于gradle版本问题导致的一系列奇葩问题探讨!
- JDK多版本冲突解决方案
- 关掉rockmongo因PHP版本问题导致的警告显示
- 由于JDK版本问题导致的错误
- 解决引用单个Library因android-support-v4.jar版本不同而导致的冲突
- Quartz因不同版本导致的异常
- ECSHOP因PHP版本导致的错误
- 两个因为JDK版本低导致的问题记录
- jdk版本导致的bug
- MySQL 因 select for update 导致的死锁问题 原因及解决方案
- jdk与oracle的jdk版本冲突:
- 因IOS版本导致的模态视图控制器dismissModalViewControllerAnimated调用问题
- HttpURLConnection 因Android版本不同而导致的Bad Request问题,在2.0+不行,4.0+可以
- 解决因flash版本升级而导致FaustCplus生成不了预览图片的问题
- 解决运行ASP.NET MVC项目时,因版本不一致导致无法运行的问题
- 因编码格式问题导致的错误
- 软工第一次作业
- HDU 1429 广度优先搜索(BFS)
- 【体系结构】MySQL 日志文件--慢查询日志
- hdu 1050 moving tables 贪心
- 创建自己的yum更新源
- 因JDK版本冲突导致问题的一系列解决方案
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- jdbc数据源
- SAP ABAP/4学习---数据类型(3)
- struts2 配置
- 小学奥数公式1
- 小学奥数公式2
- Ubuntu下Hadoop伪分布式配置(Pseudo-Distributed Mode)
- HDU 1698 线段树