我的Windows 7计算机上安装了JDK 1.7,安装JDK 1.8 u20后,我遇到以下错误:
C:\>java -version
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion'
has value '1.8', but '1.7' is required.
Error: could not find java.dll
Error: Could not find Java SE Runtime Environment.
我的PATH
变量指向旧版本(即1.7)。
这里有什么问题以及我如何将Java 8与java 7一起使用?
答案 0 :(得分:68)
问题是Java 8会安装很多你并不需要的东西:
\ windows \ system32 包含Java 8 java.exe,javaw.exe 和 javaws。 exe文件 即可。您的路径可能在开头附近有 system32 ,因此这些路径默认情况下会运行。
系统路径变量以 C:\ programdata \ Oracle \ Java \ javapath 开头。此文件夹包含 java.exe , javaw.exe 和 javaws.exe 作为JRE 8可执行文件的符号链接。
我删除了 system32 文件,并从系统路径中删除了 C:\ programdata \ Oracle \ Java \ javapath 。这似乎解决了这个问题。我现在可以通过将 JAVA_HOME 和 PATH 指向相应的文件夹来切换版本。
Oracle似乎决心让很难运行多个版本。这对于JRE来说是可以理解的,但是它对JDK来说很疯狂,因为开发人员几乎总是需要多个版本的Java。
编辑:我发现这个批处理脚本对于切换JDK非常有用。用法:jdk.bat 6 | 7 | 8。您可能必须编辑Java的安装位置。
@echo off
if "%1"=="" goto report
set _version=%1
shift
if "%1"=="DBG" shift & echo on
set _command=%1 %2 %3 %4 %5
set _jdkdir=
set _jdkver=
for /D %%f in ("C:\Program Files\java\"jdk1.%_version%.*) do call :found "%%f"
if "%_jdkdir%"=="" goto notfound
set java_home=C:\Program Files\java\%_jdkdir%
call :javapath
path %new_path%
goto :report
:javapath
setlocal enabledelayedexpansion
set _jdirs=
for /D %%j in ("C:\Program Files\java\*") do set _jdirs=!_jdirs!#%%~fj\bin
set _jdirs=%_jdirs%#
set _javabin=%java_home%\bin
set _fpath="%PATH:;=" "%"
call :checkpath %_fpath%
endlocal & set new_path=%_javabin%
goto :eof
:checkpath
if _%1==_ goto :eof
echo %_jdirs% | find /i "#%~1#" 1>nul 2>&1
set _err=%errorlevel%
if not %_err%==0 set _javabin=%_javabin%;%~1
if %_err%==0 echo Removed %~1 from path
shift
goto :checkpath
:report
javac -version
%_command%
goto :eof
:notfound
echo No JDK matching [C:\Program Files\java\jdk1.%_version%.*] found.
goto :eof
:found
set _jdkdir=%~n1%~x1
for /F "tokens=2,3 delims=." %%a in ("%_jdkdir%") do set _jdkver=1.%%a.%%b
goto :eof
答案 1 :(得分:12)
在“开始”菜单中,键入“regedit”以打开注册表编辑器
转到左侧注册表资源管理器/树状菜单中的“HKEY_LOCAL_MACHINE”
点击“HKEY_LOCAL_MACHINE”注册表
中的“软件”单击“SOFTWARE”注册表
中的“JavaSoft”单击“JavaSoft”注册表列表中的“Java Runtime Environment” 在这里你可以看到已安装java的不同版本
单击“Java Runtime Environment” - 在右侧,您将获得4-5行。请选择“CurrentVersion”并右键单击(选择修改选项) 将版本更改为“1.7”
现在魔术已经完成
答案 2 :(得分:3)
你不能吃蛋糕也不能吃。 :) 将PATH变量设置为JDK 1.8时,问题应该解决。您可以通过在命令提示符下使用set PATH手动设置PATH来运行JDK 1.7中的程序,也可以转到JDK 1.7目录并从那里运行程序。 但是你的PATH中只能有一个JDK。
答案 3 :(得分:3)
我遇到了同样的问题,然后意识到我的程序已用尽c:\Windows\SysWOW64
,因此运行旧的java.exe
。一旦我停止运行该目录(其中包含Java 7 exe
),问题就会消失,因为它正确地跟踪路径java8
。
答案 4 :(得分:2)
如果您不习惯手动删除Windows中的任何文件,只需将JAVA_HOME路径放在Windows目录的前面。
在Windows 7中定义JAVA_HOME环境变量,并在Path变量的第一个位置的变量PATH中使用它。
JAVA_HOME -> D:\dev\Java\jdk1.8.0_45
Path -> %JAVA_HOME%\bin;%SystemRoot%\system32;
答案 5 :(得分:1)
您可以定义一个java7
别名,该别名将指向JDK7的bin
文件夹,然后更改您的环境变量,使其指向JDK8。默认的JDK将是JDK8。
答案 6 :(得分:1)
感谢@Chris,对我而言,只需从C:\Windows\System32
删除文件即可解决。
使用Sencha Command时遇到了这个问题,但当然它与Sencha无关。这是一个Java安装问题。
根据这篇文章,这个问题对于使用Java 1.6和1.7的人来说也很烦人: Registry Key '...' has value '1.7', but '1.6' is required. Java 1.7 is Installed and the Registry is Pointing to it
答案 7 :(得分:1)
就我而言,我卸载了其他版本的Java,保留了较新的版本
我在系统中安装了Java 7和Java 8.
我卸载了7并保留了8,在路径中,我已经拥有Java 8。
它对我有用:)
答案 8 :(得分:0)
在Windows 10上处理多个用于开发的JDK时,这个问题很烦人(我无法使用此处建议的OS系统路径更改)。
作为部分答案(因为这可能不是'正确'安装)我使用 Cygwin 来切换JAVA_HOME并使用不同的JDK运行Maven构建(1.7,1.8)安装(通过Oracle安装程序)。 因此,如果您安装了Cygwin(或者可以安装并使用它)并且愿意使用JAVA_HOME env变量(对于下面的示例中的Maven很有用),您可以这样做(但要注意链接答案中的“技巧”) 1并相应调整您的本地路径):
export JAVA_HOME=/cygdrive/c/Progra~1/Java/jdk1.8.0_74
(mvn --version output)
Apache Maven 3.3.9(bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47 + 01:00)Maven home: C:\ Work2 \ bin \ apache-maven-3.3.9-bin \ apache-maven-3.3.9 Java版本: 1.8.0_74 ,供应商:Oracle Corporation Java home:C:\ Progra~1 \ Java \ jdk1.8.0_74 \ jre默认语言环境:it_IT,platform 编码:Cp1252操作系统名称:“windows 10”,版本:“10.0”,arch: “amd64”,家庭:“dos”
export JAVA_HOME=/cygdrive/c/Work2/bin/Java/jdk1.7.0_79_64bit/
(mvn --version output)
Apache Maven 3.3.9(bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47 + 01:00)Maven home: C:\ Work2 \ bin \ apache-maven-3.3.9-bin \ apache-maven-3.3.9 Java版本: 1.7.0_79 ,供应商:Oracle Corporation Java home:C:\ Work2 \ bin \ Java \ jdk1.7.0_79_64bit \ jre默认语言环境:it_IT, 平台编码:Cp1252操作系统名称:“windows 8.1”,版本:“6.3”, arch:“amd64”,family:“windows”
https://stackoverflow.com/questions/14567191/export-java-home-with-spaces-in-cygwin
答案 9 :(得分:0)
根据您自己的值编辑此文本,另存为“.reg”,执行,享受:)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_74]
"JavaHome"="C:\\Program Files\\Java\\jre8"