注册表项“ ...”的值为“ 1.7”,但必须为“ 1.6”。Java 1.7已安装,并且注册表指向它


95

我的开发团队最近被迫转到一个远程开发环境,在该环境中我们无法完全访问服务器。在进行转换之前,我们拥有一个可以在Java 1.7 x64和JRE 7上正常运行的JAR。当我们移到新服务器上时,JAR运行良好,但是随后一位服务器管理员将Java“更新”到了旧版本。版本并卸载了我们正在使用的版本。不要问我为什么,我不知道。我重新安装了Java 1.7,并与JRE一起卸载了1.6。

运行时发生以下问题,没有构建错误:

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

我已经在笔记本电脑上运行了相同的JAR,没有任何问题。服务器和笔记本电脑在各自的%HOME%变量和系统PATH中均具有JDK 1.7和JRE 7。我什至重新安装了JRE 6,稍后将其放在系统环境PATH变量中,结果相同。

我还把注册表改回了1.6,结果如下:我查找了它,它似乎是由于安装了多个Java(导致我的原始问题):

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0

当我浏览各种论坛时,如果能获得大家的宝贵见解,我将不胜感激。同样,这也在我们正在使用的另一台服务器上发生。谢谢!

更新:将JAR重新编译为1.6或1.7并匹配JDK并没有运气。另外,为什么在世界上,较新版本的Java会破坏较旧的编译版本?

Answers:


159

当您以某种方式混淆了Java本身时,就会发生这种情况。您尝试运行在Java 6 VM上找到JRE 7的地方。即使您只是在命令行中输入javajava -version在配置错误的环境中,它也可能显示此问题。JAR并不是问题,除非在极少数情况下JAR中的代码正在Windows注册表中寻找该问题(可能不是您的情况)。

就我而言,我有java.exejavaw.exejavaws.exe从Java 6中Windows/System32的文件夹(不知道是怎么回事了在那里)。JDK和JRE的其余部分都在PATH中找到C:\Java\jdk_1.7.0\bin。糟糕!


62
面临相同的问题,但在卸载Java 8之后与Java 8相同。通过删除Windows / System32中存在的java.exe,javaw.exe和javaws.exe修复了问题。真的很奇怪,因为我甚至不知道它是怎么到达那里的。
C Deepak

2
感谢您的通知,它会有所帮助。在我的情况下,是JDK 1.7与JDK 1.8。
daoway

7
对于x86人!!几个月前,我最初安装了1.8 jre,并想要1.8 sdk。java.exejavaw.exejavaws.exe存储在下Windows/SysWOW64。也由于某种原因,当我安装了1.8 SDK安装它java.exejavaw.exejavaws.exeC:/ProgramData/Oracle/Java/javapath。不知道为什么,但我也删除了它们,java -version仍然可以使用。
发光的

1
System32是我的关键。我已经确保javapath具有正确的版本,并且我的环境变量设置正确了……直到我解决了System32的问题,一切都没有起作用。全部都必须在同一页面上。
BK 2014年

2
删除indows / System32中存在的java.exe,javaw.exe和javaws.exe可以解决此问题。感谢@C Deepak
Tahir Jilani 2015年

59

在已经运行Java 7的系统上安装Java 8(jdk和jre)时出现了类似的错误。

错误:注册表项'Software \ JavaSoft \ Java Runtime

环境“ \ CurrentVersion”的值为“ 1.8”,但必须为“ 1.7”。

错误:找不到java.dll错误:找不到Java SE运行时环境。

我的环境设置正确(正确定义了Path和java_home),但是问题出在Java 8之前的安装程序的工作方式上,即它们用来复制三个可执行文件(java.exe,javaw.exe和javaws.exe) )到Windows系统目录。除非被新的pre-8之前的安装覆盖,否则这些将保留。

但是,Java 8安装程序会在新目录C:\ ProgramData \ Oracle \ Java \ javapath中创建指向实际JRE 8位置的符号链接。

这意味着您实际上将运行旧的7个exe,但使用新的8个DLL。

因此,解决方案就是从Windows系统目录中删除上述3个Java exe。

如果在64位Windows上运行32位Java,则exe将在Windows \ SysWOW64中,否则将在Windows \ System32中。


这是一个可行的解决方案,我遇到了同样的问题,并解决了该问题。
Sagar D

这是一个更好的解决方案……至少对我而言。谢谢。
cbmeeks

28

我已经删除了Windows / system32上的Java文件,并且还从PATH变量中删除了c:\ ProgramData \ Oracle \ Java \ javapath,因为有3个指向Java 1.8文件的符号链接。

我在%JAVA_HOME%变量中具有JDK 1.7,在PATH中具有java1.7 / bin。

PS1:我的问题是在Java 1.7和Java 1.8之间。

PS2:我无法将此内容添加到Victor的答案中,因为我的观点不够。


3
问题:尝试使用sencha cmd时遇到1.7和1.8问题。解决方案:我在%PATH%环境变量中添加了jdk1.7 / bin路径,并从c:/ windows / system32目录中删除了Java文件(java.exe,javaw.exe,javaws.exe)。问题解决了:)
saurabh 2014年

3
整个滚泥的问题是在X:\ WINDOWS \ SysWOW64中与X:\ Windows \ System32下的Java * .exe文件。一旦删除了所有再次得到了工作..
thiagoh

17

在“开始”菜单中,键入“ regedit”以打开注册表编辑器

转到左侧注册表浏览器/树菜单上的“ HKEY_LOCAL_MACHINE”

在“ HKEY_LOCAL_MACHINE”注册表中单击“软件”

在“软件”注册表中单击“ JavaSoft”

在注册表的“ JavaSoft”列表中单击“ Java Runtime Environment”,您可以看到已安装的Java的不同版本。

单击“ Java运行时环境”-在右侧,您将获得4-5行。请选择“ CurrentVersion”,然后单击鼠标右键(选择修改选项)将版本更改为“ 1.7”

现在魔术已经完成


4

我不知道是否有人仍在关注此线程,但是当我尝试将ActiveMQ 5.10作为Windows服务启动时,最近遇到了这个问题。

我没有设置JAVA_HOME路径。我安装了Java 6和Java 7,但默认版本为v7。(即,如果我打开命令窗口并输入“ java -version”)。

这是线索所在-“ java -version”返回了“ Java HotSpot(TM)64位服务器VM(内部版本23.1-b03,混合模式)”,但是我已经安装了Win32服务...

事实证明,如果在64位计算机上使用Win32包装器,它将以某种方式决定使用Java的其他版本。

因此,我的解决方法是卸载包装程序的32位版本并安装64位版本。我机器上的反感 我想只是习惯...但是幸运的是我最终解决了这个问题...


1
如果同时安装了32位和64位Java版本,并且自动(或者在我的情况下是强制性公司)更新仅更新其中的1个,则可能会遇到此问题。卸载Java的所有实例并重新安装32位和64位都可以解决。
DannyMeister 2014年

0

对于我的Win7

矛盾之处在于System32文件夹中的java.exe和javaw.exe。打开该文件夹,我看不到它们,但是使用“开始”菜单中的搜索,我获得了这些文件的链接,并将其删除。下一个searsh给了我指向JAVA_HOME中文件的链接

魔法 )


-1

正确更改目录,java.exe即转到所需的JDK版本java.exe

cd C:/Program Files/Java/jdk1.7.0_25/bin

java.exe从此目录运行,它的优先级高于注册表和$ PATH设置。

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 


-3

该罐子被编译为1.6 符合标准。这就是为什么您会收到此错误。两种解决方法:
1)使用Java 1.6

要么

2)重新编译jar以使其符合您的环境 1.7


我实际上都做过,但是请让我备份一下。JAR实际上是通过C#GUI运行的。JAR本身通过命令行运行,但不通过GUI运行。我认为这可能是我正在运行的JAR(与运行GUI有关)中的另一个JAR。这样的话可以吗?嵌套的JAR文件被编译为1.6吗?
布莱恩·阿

这听起来令人难以置信。Java版本向下兼容。在JDK 6上为/编译的代码无需重新编译或修改即可在Java 7上运行。
耶斯珀(Jesper)2013年

@Jesper我可能将此与我在Eclipse中经常看到的类似问题相混淆。
Woot4Moo

1
@Jesper这就是为什么这一切对我来说都没有意义。我发现的所有内容都与在旧Java(例如带有1.5 JRE的1.6)上运行的JAR的新版本有关。但是这个问题似乎倒退了。
Bryan A

-3

使用regedit删除与Java 7相对应的条目。它将起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.