JRE 1.7 - java版本 - 返回:java/lang/NoClassDefFoundError:java/lang/Object

Tux*_*ker 132 java

当运行任何java应用程序,或只是'java'时,jvm失败:

初始化VM
java/lang/NoClassDefFoundError 期间发生错误:java/lang/Object

这是一个错误答案的列表:

  1. 正确的Java主目录(包括/ bin目录)位于全局PATH上

  2. JAVA_HOME设置正确

  3. 执行命令java -fullversion有效

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
    Run Code Online (Sandbox Code Playgroud)
  4. / usr/java中的符号链接都指向正确的java安装

  5. 我在创建系统时没有安装任何'default'java

  6. java -version 失败......与上面相同的错误

  7. 从java安装的目录结构下发出命令也不起作用

  8. 对于64位,这是64位java

有任何想法吗?

Rig*_*802 184

此问题源于不正确的Java安装.

可能性1

注意:此方案仅适用于Java 8及更早版本.从Java 9开始,JRE的结构不同.rt.jar和朋友不再存在,并且不再使用Pack200.

Java标准库中包含各种JAR文件,如rt.jar,deploy.jar,jsse.jar,等.当JRE打包之后,这些关键的JAR文件压缩与Pack200和存储rt.pack,deploy.pack,jsse.pack等Java安装应该是其解压缩.如果您遇到此错误,显然没有发生.

您需要手动运行JRE 和文件夹中的unpack200所有.pack文件.lib/lib/ext/

视窗

要解压缩一个.pack文件(例如rt.pack),请运行:

"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar
Run Code Online (Sandbox Code Playgroud)

要从.packJRE根运行中递归解压缩所有文件:

for /r %f in (*.pack) do "%JAVA_HOME%\bin\unpack200.exe" -r -q "%f" "%~pf%~nf.jar"
Run Code Online (Sandbox Code Playgroud)

*nix中

要解压缩一个.pack文件(例如rt.pack),请运行:

/usr/bin/unpack200 -r -v rt.pack rt.jar
Run Code Online (Sandbox Code Playgroud)

要从.packJRE根运行中递归解压缩所有文件:

find -iname "*.pack" -exec sh -c "/usr/bin/unpack200 -r -q {} \$(echo {} | sed 's/\(.*\.\)pack/\1jar/')" \;
Run Code Online (Sandbox Code Playgroud)

可能性2

您以其他方式错误地安装了Java.也许您安装时没有管理员权限,或者试图简单地从安装程序中提取文件.请使用安装程序和/或更多权限重试.或者,如果您不想使用安装程序,请改用.tar.gzJava包.

  • @Robin Kanters作为这个确切的问题/错误消息,其症状和修复方法与平台无关,*这是一个Java RE问题,而不是Solaris.* (23认同)
  • 我总是只使用`for%i in(*.pack)do(..\bin\unpack200"%i""%~ni.jar"&del"%i")`(也许有一天我会做到的更健壮一点,所以我不必手动更改路径,但是再次,我通常只使用JRE的`.gz`版本,它不会打包它们.) (5认同)
  • 这是一个Solaris问题,而不是Windows. (2认同)
  • 卸载和重新安装对我来说很有用. (2认同)

bet*_*pfa 26

对于*nix OS上的Java 8,请转到<jdk root>/jre/lib(对我来说/usr/java/jdk1.8.0_05/jre/lib).从此目录中,执行:

../../bin/unpack200 rt.pack rt.jar
../../bin/unpack200 jsse.pack jsse.rar
../../bin/unpack200 charsets.pack charsets.jar
Run Code Online (Sandbox Code Playgroud)

为了防止在安装了另一个JRE的情况下出现版本问题,请使用unpack200与您正在修复的JRE一起使用的版本问题- 也就是说,从命令行使用../../bin/unpack200(对我来说,扩展为/usr/java/jdk1.8.0_05/bin/unpack200),而不仅仅是unpack200.

  • 要开发,您必须解压缩其他软件包:在“” &lt;jdk1.8_root&gt; / jre / lib / ext中的“” &lt;jdk1.8_root&gt; / lib“`../bin/unpack200 tools.pack tools.jar`中“``../../bin/unpack200 jfxrt.pack jfxrt.jar``../../bin/unpack200 localedata.pack localedata.jar` (2认同)

Tom*_*aso 13

似乎对于64位架构,您必须同时安装32位版本和64位版本的jre(架构无关文件,因为rt.jar仅在32位版本中分发).

记住那时要注意在全局PATH环境变量中包含正确的java可执行文件.

  • 你在哪里得到的那些`体系结构独立文件rt.jar只在32-bin版本中分发? (3认同)
  • 除此之外 - 我们在SmartOS上进行手动安装时遇到了这个问题.按照https://blogs.oracle.com/thefield/entry/solaris_11_jdk_installation(大部分)中的说明操作,您就可以了. (3认同)

iaf*_*rek 11

不耐烦的人的快速解决方案 ;)在Windows机器上,尝试这样:转到C:\Windows\System32目录并删除java.exe(或将其重命名为类似的东西java.exe.old).

由于至少1.6,java.exeWindows目录中不应该有.如果有的话,这是一个遗留物.

更多阅读:

我真的很惊讶2012年的一个问题还没有得到批准的答案,我在2015年的Win 7 32位操作系统上遇到了同样的问题!

那发生了什么?

基本上,一切都工作正常,我下载H2数据库,当我试图开始时,H2 Console (Command Line)我得到:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
Run Code Online (Sandbox Code Playgroud)

我发现了这个问题,我能够确认相同的症状:

JAVA_HOME设置正确:

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26
Run Code Online (Sandbox Code Playgroud)

java -versionjava --fullversion工作正常,失败了

java -fullversion
java full version "1.6.0_45-b06"
Run Code Online (Sandbox Code Playgroud)

解决方案: 转到C:\Windows\System32目录并删除(我实际上已重命名)java.exe文件!!!!

现在,我得到:

java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

并且H2 Console (Command Line)工作正常!

积分转到本论坛的最后一篇文章:https: //bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/

  • 对我来说,`C:\ ProgramData\Oracle\Java\javapath`中java的符号链接导致了这个问题.我更改PATH环境变量,现在它可以工作. (4认同)

小智 10

我今天下载了新的JDK(1.8.0.73),c:> java.exe并且臭名昭着:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
Run Code Online (Sandbox Code Playgroud)

我只想在这里分享我的工作解决方案.

当我进入jdk\bin文件夹时,Java会运行正常,所以我知道它是PATH.我开始PATH只是\jdk\bin在CMD证明它并且它有效.

所以,我想,PATH必须有一个文件夹java.exe导致了冲突.事实证明,这是C:\>ProgramData\Oracle\Java\javapath保存符号链接到可执行文件.

java.exe指着jre\bin.当我开始时文件已损坏\jre\bin\java.exe- 完全相同的错误.答对了.我重新安装了JRE,问题就消失了.快乐的编码......


小智 8

您很可能在安装中缺少一个名为rt.jar的文件,该文件包含java.lang.Object的类文件.检查安装文件等.

特别要注意的是,64位intsaller覆盖(或安装"旁边")现有的32位安装.换句话说,要获得完全可用的64位安装,必须首先运行32位安装,如果您有64位安装机器,请使用64位安装进行安装...

如果您只进行64位安装,则会丢失安装中的某些文件,并且会出现上述错误.


小智 6

在Windows 10上,我遇到了与JRE 1.8(8u121)相同的问题.
打字

java -version
Run Code Online (Sandbox Code Playgroud)

cmd提示符返回

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
Run Code Online (Sandbox Code Playgroud)

所有其他命令,echo %JAVA_HOME%,echo %JRE_HOME%,echo %PATH%,java -fullversion工作得很好.

转到系统管理面板上的环境变量,从PATH中删除链接C:\ProgramData\Oracle\Java\javapath,并确保在PATH中设置链接C:\Program Files\Java Folder\bin.

之后,检查是否C:\Windows\System32存在java.exe文件; 如果为true,则删除该文件.

现在打字java -version它工作正常.

  • Windows 更新后我遇到了同样的问题,但是我没有文件夹“C:\Program Files\Java Folder\bin”。相反,我使用 `C:\Program Files\Java\jdk1.8.0_161\bin` 但无论如何它对我没有帮助。文件夹 System32 中没有文件 java.exe (2认同)

小智 5

当您通过_uncompressing_它而不是_executing_它安装JDK时会发生此问题.

举例:

unzip jdk-6u45-linux-x64.bin  (wrong)

sh ./jdk-6u45-linux-x64.bin   (right)
Run Code Online (Sandbox Code Playgroud)

在第一个场景中,运行时库(如rt.jar)不会自动解包(因此,您可以找到rt.pack文件等,而不是.jar文件).


dev*_*747 5

我最近也遇到了同样的问题。就我而言,我的 Windows 7 机器自动下载了 java 并添加C:\ProgramData\Oracle\Java\javapath到我的路径环境变量的开头,这弄乱了我的 java.util.concurrent.java 文件。一旦我把它从路上去掉,它就起作用了。