我的机器上最开始安装的是jdk1.6,后来因为工作需要又安装了jdk1.4。但是,环境变量我并未更改,还是指向jdk1.6的路径的。可是,在cmd窗口输入 Java -version 却得到是1.4.2。
查询环境变量:

1.我的电脑->属性->高级->环境变量

2. 系统环境变量(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Environment)
 
当前用户环境变量(HKEY_CURRENT_USER/Environment)
2个设置完全是一样,都是指向1.6。
为了搞清楚问题的原因,通过查询相关的资料,原来是这样的:
JDK在安装的过程当中将在注册表会生成如下3个项目:
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/JavaDevelopment Kit
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Plug-in
HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment
同 时,JDK安装程序将会把java.exe,javaw.exe,javareg.exe这3个可执行文件拷贝 到%SystemRoot%/system32目录下,由于%SystemRoot%/system32被操作系统缺省的设置为最高优先权的PATH搜索 路径,因此可保证用户在命令行任何目录下可运行java.exe来启动JVM。
查询HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment得知CurrentVersion=1.4。 于是我手动将它修改为1.6后,然后运行java -version得到以下结果:
Registry key 'Software/JavaSoft/Java Runtime Environment/
has value '1.6', but '1.4' is required.
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment.

所以,不能简单的修改注册表的CurrentVersion值来达到更改运行的JRE。若人为的修改CurrentVersion,会使得不同版本的java.exe加载与己版本不符的java.dll及 jvm.dll,将引起难以预料的后果!
一 般地,当在系统中装了两套或多套版本的Java2 SDK,后面安装的Java2 SDK会将自己带的java.exe和javaw.exe拷贝到%SystemRoot%/system32目录下,从而覆盖先前版本的java.exe 和 javaw.exe,并且在注册表中改写CurrentVersion为后安装的版本。所以建议在安装Java2 SDK前,先卸载以前安装的版本。

以下是在我在系统中安装多个版本JDK的体验:

1、安装JDK1.5以上版本:这可以保证任何版本的ECLIPSE都可以安装(否则如果安装JDK为1.3而ECLIPSE为高版本的会提示JDK版本低,安装不了;有的如果先安装了高版本的JDK,但一段时间后卸载了高版本的JDK,那么电脑上只有低版本的JDK和高版本的ECLIPSE,则运行ECLIPSE时只会看到起动界面,而后消失)。

2、安装ECLIPSE,在安装了高版本的JDK后,一般ECLIPSE安装没有问题

3、视情况而定,看你要运行的程序是哪个JDK的(有的程序是之前开发的使用的JDK版本可能是1.3的),如我现在要运行JDK1.3下的程序,我会

(1)从别的电脑上拷贝已安装好的JDK1.3文件夹

(2)将PATH,CLASSPATH指该文件夹目录

(3)ECLIPSE/WINDOW/PREFERENCES/JAVA/INSTALLED JRES/在里面添加并勾选JDK1.3,并勾除JDK1.5的。

(4)将ECLIPSE/WINDOW/PREFERENCES/JAVA/COMPILER中的compliance设为1.3的版本即可。(如果选1.5可能会在命令环境编译正确,但eclipse报错:说java.lang.UnsupportedClassVersionError could not found main class),还有可能出错的就是在eclipse下默认包时编译正错,但使用自己创建的包时编译其中的类失败。

其实可以直接将环境变量中path的配置:%java_home%\bin放到最前面,然后可以修改java_home的值切换不同的jdk。

相关问题可以见:

http://www.blogjava.NET/zhyiwww/archive/2007/01/16/94235.html

http://blog.csdn.Net/ybyb14/archive/2007/05/09/1602230.asp

JAVA学习提高之----安装多个JDK版本的问题的更多相关文章

  1. win7+64位+Java学习基本软件安装+环境配置+eclipse(IDE)

    一.下载安装JDK 1.安装包下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.h ...

  2. 同一个电脑安装两个jdk版本

    同一个电脑安装两个jdk版本 场景:公司项目使用的jdk为1.,最近不是很忙,学习scala.该系统使用到了jdk1.8的特性,所以I need 俩版本,开整!!! . 准备两个版本的jdk我的两个j ...

  3. 【Java】Linux下安装配置Oracle JDK 1.7版本

    1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本,要与Ubuntu兼容才行 下载地址 http://ww ...

  4. Java学习笔记(2):jdk的配置

    配置Java的开发环境 先说明一下,我的jdk文件目录是:D:\language\java\java soft\jdk1.6 JDK的安装与配置 解压“开发软件”中的jdk1.6.rar(解压版)到D ...

  5. java学习——平台的安装与部署

    Java 平台安装与部署 jre,jdk安装与部署 1)jre,jdk安装过程(略) 2)部署过程 新建(JAVA_HOME) 变量名:JAVA_HOME 变量值:E:\Program Files ( ...

  6. Docker环境安装部署Java应用(含安装Tomcat和JDK)

    1.部署思路 两台docker机(centos 7系统),Docker 版本:18.09.6, build 481bc77156 Docker host IP:192.168.102.135 Dock ...

  7. Java学习之JVM、JRE、JDK联系与区别

    JVM,全称是Java Virtual Machine,翻译为Java虚拟机: JRE,全称是Java Runtime Environment,翻译为Java运行时环境: JDK,全称是Java De ...

  8. 配置Glassfish服务器、部署Java web项目、Maven安装配置及JDK版本匹配性问题

    错误一:在win7上通过命令asadmin start-domain启动Glassfish服务器时报错(如下): Exception in thread "main" java.l ...

  9. 如何在一台计算机上安装多个 JDK 版本

    前言 对于使用 Java 语言开发的朋友可能会遇到这种情况,有时想学习和探索 Java 的最新版本提供的一些新特性,比如 Java 11,但你无法将其安装在自己的计算机上,因为你的团队正在使用比这个旧 ...

随机推荐

  1. 错误描述: 抱歉,该商品的交易金额与原先的不一致,请重新创建交易付款。 错误代码: TRADE_TOTALFEE_NOT_MATCH

    由于在支付宝最后支付,出现了问题导致未能支付成功,而支付宝已经记录了当前的网站订单号(out_trade_no),所以下次再以同一张订单进行支付时,就必须与之前的金额一致,否则就报上面的错. 解决方法 ...

  2. Out of Hay

    Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13094 Accepted: 5078 Descripti ...

  3. C#'~'按位取反运算符的使用

    按位取反运算符是按照二进制的每一位取反,比如byte类型,~0的结果就是255. 该功能可以在mask中做一些反转操作 如下代码,a存放了2,4,8三个值.用按位取反'~'运算符反转 打印结果是 fa ...

  4. noi 8465 马走日

    8465:马走日 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  1024kB 描述 马在中国象棋以日字形规则移动. 请编写一段程序,给定n*m大小的棋盘,以及马的初始位置(x,y ...

  5. GUI_Delay函数

    GUI_Delay()函数 使用GUI_Delay()函数时,对于其延时时间不确定,明明设置为最小值1,延时时间 仍旧太长,不能达到需求.遂决定研究明白其实现机理. uC/OS-II使用OSTimeD ...

  6. OBD芯片应用开发手册 OBD2开发 内部资料分享 汽车电子通讯开发TDA61 TDA66芯片

    OBD产品及各种汽车电子相关的开发.往往需要开发者学习各种汽车协议,深入了解全部OBD规范和汽车各性能参数.这往往需要开发者很长的时间学习研究,大大延缓了OBD产品的上市开发进度.为此深圳芯方案电子公 ...

  7. thinkphp隐藏中url的index.php

    在本地进行测试 1.修改apache配置文件将如下代码#去掉 #LoadModule rewrite_module modules/mod_rewrite.so   在index.php 目录下新建文 ...

  8. hao dongxi

    asp.net页面间传值方式后台 asp.net页面间传值的几种方法 利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. json的使用 前后台统一以对象的方式编程 ASP. ...

  9. Java String 一些实验

    1.请查看String.equals()方法的实现代码,注意学习其实现方法. 结果: 原因: 当直接使用new关键字创建字符串对象时,虽然值一致(都是“Hello”),但s1.s2仍然是两个独立的对象 ...

  10. Zabbix监控交换机设置

    说明: Zabbix监控服务端已经配置完成,现在要使用Zabbix对交换机进行监控. 具体操作: 以下操作在被监控的交换机上进行,这里以Cisco交换机为例. 一.登录到Cisco交换机,开启snmp ...