我的机器上最 开 始安装的是 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/Java Development 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 前,先卸 载 以前 安装的版本。