Jar 注册表项'';有价值';1.7';,但是';1.6';是必需的。安装了Java1.7,注册表指向它

Jar 注册表项'';有价值';1.7';,但是';1.6';是必需的。安装了Java1.7,注册表指向它,jar,environment-variables,java,Jar,Environment Variables,Java,我的开发团队最近被迫转入一个远程开发环境,在那里我们无法完全访问服务器。在更换之前,我们有一个JAR,它在Java1.7x64和JRE7上运行良好。当我们转移到新服务器时,我们的JAR运行正常,但是一位服务器管理员“更新”了我们的Java到旧版本,并卸载了我们正在使用的版本。别问我为什么,我不知道。我重新安装了Java1.7,并与JRE一起卸载了1.6 运行时出现以下问题,没有生成错误: Registry key 'Software\JavaSoft\Java Runtime Environme

我的开发团队最近被迫转入一个远程开发环境,在那里我们无法完全访问服务器。在更换之前,我们有一个JAR,它在Java1.7x64和JRE7上运行良好。当我们转移到新服务器时,我们的JAR运行正常,但是一位服务器管理员“更新”了我们的Java到旧版本,并卸载了我们正在使用的版本。别问我为什么,我不知道。我重新安装了Java1.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%变量和系统路径中都有JDK 1.7和JRE 7。我甚至重新安装了JRE 6,并在稍后将其放入系统环境路径变量中,得到了相同的结果

我还将注册表改回1.6,结果如下,我查了一下,似乎是因为安装了多个Java(导致了我最初的问题):

我会很感激你们的任何见解,因为我一直在各种论坛上寻找,但似乎没有什么是我的问题。此外,这也发生在我们正在使用的另一台服务器上。谢谢


更新:将JAR重新编译为1.6或1.7并与JDK匹配不会带来好运。还有,为什么新版本的Java会破坏旧的编译版本呢?

jar被编译成兼容
1.6
。这就是为什么会出现这个错误。两种解决方案:
1) 使用Java1.6


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

当您不知何故混淆了java本身时,就会发生这种情况。您正在尝试运行一个java 6虚拟机,其中发现了一个JRE 7。即使在配置错误的环境中键入命令行
java
java-version
,也可能会显示此问题。JAR不是问题所在,除非JAR中的代码在Windows注册表中查找JAR(这可能不是您的情况)


在我的例子中,我在
Windows/System32
文件夹中有来自Java6的
java.exe
javaw.exe
javaws.exe
(不知道它是如何出现的)。JDK和JRE的其余部分位于
C:\Java\JDK_1.7.0\bin
内的路径中。哎呀

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

我没有设置JAVA_主路径。 我安装了Java6和Java7,但默认版本是v7。(即,如果我打开一个命令窗口并键入“java-version”)

这就是线索所在——“java-version”返回了“java热点(TM)64位服务器虚拟机(构建23.1-b03,混合模式)”,但我安装了Win32服务

事实证明,如果在64位机器上使用Win32包装器,它会以某种方式决定使用不同版本的Java

所以我的修复方法是卸载32位版本的包装器,然后安装64位版本。
厌恶我的机器;我猜只是习惯。。。但幸运的是,我最终解决了这个问题…

使用regedit删除了与java 7对应的条目。它会起作用。

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

我在%JAVA_HOME%变量中有JDK 1.7,在路径中有java1.7/bin

PS1:我的问题是在Java1.7和Java1.8之间


PS2:我不能将此作为对Victor答案的评论,因为我没有足够的分数。

在已经运行java 7的系统上安装java 8(jdk&jre)时,也有类似的错误

错误:注册表项“Software\JavaSoft\Java运行时”

环境“\CurrentVersion”的值为“1.8”,但需要“1.7”

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

我的环境设置正确(Path&java_home定义正确),但问题源于8之前的java安装程序的工作方式,即他们用于将三个可执行文件(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中。

对于我的Win7

悖论存在于System32文件夹中的java.exe和javaw.exe中。 打开那个文件夹,我看不到它们,但使用“开始”菜单中的搜索,我得到了这些文件的链接,并将它们删除。接下来,searsh给了我JAVA_主页上的文件链接


magic)

我通过卸载Java 1.8解决了这个问题,在开始菜单中键入“regedit”打开注册表编辑器

转到左侧注册表资源管理器/目录树菜单上的“HKEY_LOCAL_MACHINE”

单击“HKEY_本地_机器”注册表中的“软件”

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

单击“JavaSoft”注册表列表中的“Java运行时环境”,您可以看到已安装Java的不同版本

单击“Java运行时环境”-在右边您将看到4-5行。请选择“当前版本”并右键单击(选择修改选项)将版本更改为“1.7”


现在魔术已经完成了

用正确的
java.ex更改目录
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
cd C:/Program Files/Java/jdk1.7.0_25/bin
java -jar C:/installed/selenium-server-standalone-2.53.0.jar