注册表项'...'的值为'1.7',但需要'1.6'.Java 1.7已安装且注册表指向它

not*_*dev 95 java jar environment-variables

我的开发团队最近被迫转到我们无法完全访问服务器的远程开发环境.在转换之前,我们有一个JAR在Java 1.7 x64和JRE 7上正常运行.当我们转移到新服务器时,我们的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.
Run Code Online (Sandbox Code Playgroud)

我在我的笔记本电脑上运行相同的JAR没有任何问题.服务器和我的笔记本电脑在相应的%HOME%变量和系统路径中都有JDK 1.7和JRE 7.我甚至重新安装了JRE 6并将其放在系统环境PATH变量中,结果相同.

我也改变了注册表回过头来再看1.6和它的结果在下面,我抬头一看,这似乎是从具有安装(导致回到我原来的问题)多个Java类:

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
Run Code Online (Sandbox Code Playgroud)

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

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

Vic*_*usa 159

当你以某种方式混淆java本身时会发生这种情 您正在尝试运行它找到JRE 7的java 6 VM.即使您只是在命令行中输入javajava -version在配置错误的环境中,它也可能显示此问题.JAR不是问题,除非在JAR中的代码在Windows注册表中查找的情况非常不太可能(可能不是您的情况).

在我的情况下,我有java.exe,javaw.exejavaws.exeWindows/System32文件夹中的Java 6 (不知道它是如何在那里).其余的JDK和JRE在PATH里面找到了C:\Java\jdk_1.7.0\bin.哎呀!

  • 面对相同的问题,但卸载后与Java 8相同.修复了删除Windows/System32中存在的java.exe,javaw.exe和javaws.exe的问题.真的很奇怪,即使我不知道它是如何到达那里的. (62认同)
  • 对于x86人!! 我最初在几个月前安装了1.8 jre,并希望1.8 sdk.`java.exe`,`javaw.exe`和`javaws.exe`存储在`Windows/SysWOW64`下.出于某种原因,当我安装1.8 sdk时,它在`C:/ ProgramData/Oracle/Java/javapath`下安装了`java.exe`,`javaw.exe`和`javaws.exe`.不知道为什么,但我也删除了它们,`java -version`仍然有效. (7认同)
  • 感谢您的注意,它有所帮助.在我的案例中,JDK 1.7对比JDK 1.8. (2认同)
  • 删除indows/System32中的java.exe,javaw.exe和javaws.exe修复了这个问题.谢谢@C Deepak (2认同)

Joo*_*ool 59

在已经运行Java 7的系统上安装java 8(jdk和jre)时遇到类似的错误.

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

环境'\ CurrentVersion'的值为'1.8',但需要'1.7'.

错误:找不到java.dll错误:找不到Java SE Runtime Environment.

我的环境是正确设置(路径和JAVA_HOME正确定义),但问题由他们用于复制三个可执行文件的方式预先8 Java的安装工作,这是发生(的java.exe,javaw.exe的&javaws.exe )到Windows系统目录.除非被新的8级安装覆盖,否则这些仍然存在.

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

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

因此,解决方案只是从Windows系统目录中删除3个Java exes,如上所述.

如果您在64位Windows上运行32位Java,那么exes将在Windows\SysWOW64中,否则在Windows\System32中.


Jos*_*eno 28

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

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

PS1:我的问题出在Java 1.7和Java 1.8之间.

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

  • 问题:我在尝试使用sencha cmd时遇到了1.7和1.8的问题.解决方案:我在%PATH%环境变量中添加了jdk1.7/bin路径,并从c:/ windows/system32目录中删除了java文件(java.exe,javaw.exe,javaws.exe).问题得到解决:) (3认同)
  • 整个f***问题是X:\ Windows\SysWOW64和X:\ Windows\System32 java*.exe文件..一旦删除所有再次工作.. (3认同)

小智 17

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

转到左侧注册表资源管理器/树状菜单中的"HKEY_LOCAL_MACHINE"

单击"HKEY_LOCAL_MACHINE"注册表中的"SOFTWARE"

单击"SOFTWARE"注册表中的"JavaSoft"

单击"JavaSoft"注册表列表中的"Java Runtime Environment",可以看到已安装java的不同版本

单击"Java Runtime Environment" - 在右侧,您将获得4-5行.请选择"CurrentVersion"并右键单击(选择修改选项)将版本更改为"1.7"

现在魔术已经完成了


Woo*_*Moo -3

该 jar 已编译为1.6 兼容的。这就是您收到此错误的原因。两种解决方案:
1)使用Java 1.6

或者

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