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


135

运行任何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"
  4. / usr / java中的符号链接均指向正确的Java安装

  5. 创建系统时我没有安装任何“默认” java

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

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

  8. 这是用于64位的64位Java

有任何想法吗?


2
似乎有问题加载rt.jar文件,这是需要JVM在加载的时间JRE
Bhavik安巴尼

也许一些与权限相关的问题?
Mark Bramnik 2012年

运行truss / strace以查看任何丢失的文件/文件权限
Jayan 2012年

inbytebg.com/techblog/?p=189,在第一个评论上,有一个修补安装程序的窍门
Sebastian

Answers:


186

此问题源于Java安装不正确。

可能性1

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

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

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

视窗

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

"%JAVA_HOME%\bin\unpack200" -r -v rt.pack rt.jar

要递归解压缩所有.pack文件,请从JRE根目录运行:

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

*尼克斯

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

/usr/bin/unpack200 -r -v rt.pack rt.jar

要递归解压缩所有.pack文件,请从JRE根目录运行:

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

可能性2

您以其他方式错误安装了Java。也许您是在没有管理员权限的情况下安装的,或者只是尝试从安装程序中提取文件。使用安装程序和/或更多特权重试。或者,如果您不想使用安装程序,请改用.tar.gzJava软件包。


2
这是一个Solaris问题,而不是Windows。
罗宾·坎特斯

1
如果您只是下载java linux存档文件,并且不想使用安装脚本,则此解决方案会有所帮助。
PotOfTea 2013年

23
@Robin Kanters作为此确切的问题/错误消息,其症状和修复方式与平台无关,这是Java RE问题,而不是Solaris。

1
Java做一些自动更新后,确认Windows上存在此问题
Lassi Kinnunen 2014年

5
我总是只使用for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(也许有一天我会使其更加健壮,这样我就不必手动更改路径,但是话又说回来,我通常只使用.gz不打包它们的JRE版本。 )
Synetech,2015年

31

对于* nix操作系统上的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

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


3
要开发,您必须打开其他包装:"<jdk1.8_root>/lib" ../bin/unpack200 tools.pack tools.jarin"<jdk1.8_root>/jre/lib/ext" ../../bin/unpack200 jfxrt.pack jfxrt.jar ../../bin/unpack200 localedata.pack localedata.jar
betontalpfa 2014年

某些脚本可以在这里找到,从手动提取JDK解开所有丢失的罐子:stackoverflow.com/questions/2203922/...
Kloe2378231

就我而言,这就是问题所在。我正在使用Ubuntu 18.04。谢谢!
Boncho Valkov

13

似乎对于64位体系结构,您必须同时安装32位版本和jre的64位版本(与rt.jar无关的体系结构独立文件仅在32位版本中分发)。

请记住,然后要注意在全局PATH环境变量中包括正确的Java可执行文件。


3
你从哪儿得到的architecture independent files as rt.jar are distributed only in the 32-bin version
Aleksandr M

我刚刚检查了分发内容
Tommaso 2012年

+1是的,您是对的。rt.jar不包括在solaris 64位的jre软件包中。
Aleksandr M

3
补充一点-在SmartOS上手动安装时,我们遇到了这个问题。遵循在blogs.oracle.com/thefield/entry/solaris_11_jdk_installation上找到的说明(大多数情况下),您会没事的。
库什希尔

我安装了两个软件包jdk-7u79-solaris-sparcv9.tar.Z和jdk-7u79-solaris-sparc.tar.Z。现在看来它正在工作。泰
Alex Pi

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

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

JAVA_HOME设置正确:

echo %JAVA_HOME%
C:\Program Files\Java\jdk1.6.0_26

java -version失败,但java --fullversion工作正常:

java -fullversion
java full version "1.6.0_45-b06"

解决方案: 转到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)

并且H2 Console (Command Line)效果很好!

鸣谢到该论坛的最后一篇文章:https : //bukkit.org/threads/java-lang-noclassdeffounderror-java-lang-object.70450/


我也正面临着这个问题,但是在您的情况下,您似乎只是在使用旧版本的Java。1.6.0_26!= 1.6.0_45,您的旧版本可能没有问题。
Centimane 2015年

发现得好!我已经安装了JDK 1.6.0_26,并且该“较新”版本来自Windows System32文件夹。两者都在PATH环境变量中,实际上我不想使用Windows提供的Java运行时。因此,删除它可以解决此问题。也许您的PATH中也有两个Java运行时?
iaforek 2015年

对我而言,我的安装缺少rt.jar(在其中找到java.lang.Object)。不幸的是,当我从kickstart安装RPM时,它缺少rt.jar,但是如果在那之后安装,那将是一个有趣的问题。
Centimane 2015年

我帮不上RPM。对于那个很抱歉。
iaforek 2015年

4
对我来说,java中的符号链接C:\ProgramData\Oracle\Java\javapath导致了问题。我更改了PATH环境变量,现在它可以工作了。
WhiteKnight

10

我今天开始下载新的JDK(1.8.0.73),c:> java.exe并声名狼藉:

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

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

当我进入该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位的集成程序会覆盖现有的32位安装程序(或在其旁边安装)。换句话说,要获得完全正常的64位安装,必须首先运行32位安装,然后在拥有64位计算机的情况下继续进行64位安装。

相反,如果仅执行64位安装,则安装中将缺少某些文件,并且会出现诸如上述错误之类的错误。


这是答案的一部分。您需要解压缩Java SDK路径的/ lib和lib / ext目录中的所有* .pack文件。unpack200可以帮助您。请,请参阅Rigg802的评论。
危险89年

7

在Windows 10上,JRE 1.8(8u121)面临相同的问题。
打字

java -version

cmd提示返回

Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object

所有其他命令,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它可以正常工作。


2
Windows更新后出现相同的问题,但是我没有文件夹C:\Program Files\Java Folder\bin。取而代之的是,我使用C:\Program Files\Java\jdk1.8.0_161\bin它,但仍然无济于事。文件夹System32中没有文件java.exe
Tom

6

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

例如:

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

sh ./jdk-6u45-linux-x64.bin   (right)

在第一种情况下,运行时库(如rt.jar)不会自动变得不被理解(因此,您可以找到rt.pack文件等,而不是.jar文件)。


4

我最近有同样的问题。在我的情况下,我的Windows 7机器自动下载Java,并将其添加C:\ProgramData\Oracle\Java\javapath到路径环境变量的开头,这弄乱了我的Java。一旦我摆脱了那条路,它就会起作用。


3

如果对Java二进制文件执行“ chmod u + rx”并运行它,它将解压缩jar文件,并且您可以执行java -version而不会出现运行时错误


3

您不能仅安装64位,必须先安装32位,然后添加64位组件。

从java.com:

在允许32位JVM的64位系统上安装JRE是分两步的过程:首先安装32位JRE,然后安装对64位操作的附加支持。文件名如下:


OP没有提及有关在64位系统上运行32位JVM的任何信息...?
wookie919

1

如果您在未先安装32位的情况下安装了64位版本,则尽管解决了所有其他问题,仍会发生此错误。我有一台全新的运行Java 8u71的Dell i7 64位Windows 10 Pro计算机。在将我的%path%和%classpath%添加到环境变量并尝试了其他修复程序之后,卸载64位,安装32位然后重新安装64位对此进行了修复。

提到的某些问题(例如未解压缩文件等)可能仍然是导致问题的原因,但是如果您也没有这样做,其他修复程序将无法正常工作。


1

就我而言,我使用Windows 8.1(已安装jdk1.8.0_77),做了三件事:

  1. 我删除了以前的jdks
  2. 我在C:\ Windows \ System32中重命名了java.exe文件
  3. 我还删除了PATH中的C:\ ProgramData \ Oracle \ Java \ javapath(回显%PATH%)

瞧,解决了!



0

另一个答案可能是在Linux中使用tar.gz文件。solaris平台似乎也有类似的东西。这样,所有文件将已经具有预期的格式,并且不会出现任何拆包问题。


您是什么意思,而是使用tar.gz文件?
Koray Tugay

考虑到大约2.5年前我回答了这个问题,我不得不回顾一下Java下载站点。在这里,您可以选择以.rpm的形式下载LinuX的Java。我想我以前尝试过并遇到麻烦。相反,下载tar.gz文件会更好,因为它以所需的文件格式包含了所有内容。
Rythmic

0

我在使用JDK 1.7.0_40 i586的x86_64 Linux安装上遇到了一些问题。我发现问题在于,如Rigg802所述,rpm无法解压缩jar文件(尽管rpm标记成功):

Unpacking JAR files...
        rt.jar...
/var/tmp/rpm-tmp.zLzkkb: /usr/java/jdk1.7.0_40/bin/unpack200: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
Error: unpack could not create JAR file:

        /usr/java/jdk1.7.0_40/jre/lib/rt.jar

文件/lib/ld-linux.so.2由glibc-2.12-1.107.el6_4.4提供。i686不在jdk rpm的rpm deps中。

Oracle JDK rpm还需要32位版本的libgcc-4.4.7-3.el6。i686要安装

因此,解决方法是先安装glibc-2.12-1.107.el6_4.4.i686和libgcc-4.4.7-3.el6.i686。


我在Fedora 20上遇到了同样的问题,并安装libgcc-4.8.2-7.fc20.i686解决了该问题。Txs
Pipe

0

对我有用的快速修复:

for file in $(find "$JAVA_HOME" -name "*pack")
do 
    unpack200 "${file}" "${test_file/%pack/jar}";
done

0

我发现提取.rpm文件时发生此错误。

然后,我删除了该文件夹,并下载了Linux 64的jdk-7u79-linux-x64.tar.gz,并提取了该文件的内容。另外:export JAVA_HOME = / opt / java / jdk1.7.0_79 export JDK_HOME = / opt / java / jdk1.7.0_79 export PATH = $ {JAVA_HOME} / bin


0

只需再次安装jre即可。它只是解决了我的问题。(我安装jdk后,SonarQube启动批处理开始出现此错误)



0

刚在Solaris上这样做,并遇到了甚至“ java -version”都不起作用的相同问题。发行版的64位版本比32位版本小是有原因的。确实如上所述。

换句话说,要获得完全正常的64位安装,必须首先运行32位安装,然后在拥有64位计算机的情况下继续进行64位安装。

因此,我为32位运行了安装程序:

sh jdk-6u131-solaris-sparc.sh

然后,我为64位运行安装程序:

sh jdk-6u131-solaris-sparcv9.sh

这给了我几个Java可执行文件供您选择:

  • $查找。名称Java
  • ./jdk1.6.0_131/db/demo/programs/scores/java
  • ./jdk1.6.0_131/db/demo/programs/vtis/java
  • ./jdk1.6.0_131/bin/java
  • ./jdk1.6.0_131/bin/sparcv9/java
  • ./jdk1.6.0_131/jre/bin/java
  • ./jdk1.6.0_131/jre/bin/sparcv9/java

sparcv9 java是64位版本,与32位JDK一起安装时,它们与“ -version”一起使用。

  • ./jdk1.6.0_131/bin/sparcv9/java -version
  • Java版本“ 1.6.0_131”
  • Java(TM)SE运行时环境(内部版本1.6.0_131-b32)
  • Java HotSpot(TM)64位服务器VM(内部版本20.131-b32,混合模式)

-担


是的,但问题是从2012年开始的,我们不知道OP的平台。他指的/usr/java是明显类似于Linux / Unix的OS。没错,在Java8之前,Solaris的Java安装与其他任何操作系统都不相同。基本上,您必须首先安装32位软件包,然后再在其顶部安装64位软件包。但这就是过去,因为Solaris不再支持32位Java(类似于Mac OS X
。– peterh 2016年

0

在窗口10中,env中已经存在一个路径,因为C:\>ProgramData\Oracle\Java\javapath该路径包含指向可执行文件的符号链接。

当我安装新版本并将其从环境变量中删除时,我的所有项目开始显示它。

我在视窗10中使用日蚀氧气

解决它:-

  1. 我只是C:\>ProgramData\Oracle\Java\javapath从环境变量中删除路径,并在路径中添加了新的env作为JAVA_HOME和%JAVA_HOME%/ bin

  2. 我以管理员权限重新安装jdk(删除以前的JRE文件夹)

  3. 打开eclipse项目>右键单击>转到属性>在库中>现在删除JRE系统库>单击添加库>选择“ JRE系统库”>单击下一步>选择“工作区默认JRE(jre1.8.x_xxx)”>完

我的问题已解决:)希望能为您提供帮助:)




0

JAVA安装版本是否有问题

C:\ JAVA在哪里

将给出它拾取的java的位置。如果您的安装路径以外的其他路径,请删除这些文件或将其重命名(可能是_backup)。您将获得正确版本的Java文件。


-1

我遇到了同样的问题,我安装了两个Java版本,因此导致了此问题。确认是否执行此操作,如果未打开,请单击控制面板中的Java图标,然后问题仍然存在,只需执行以下操作即可卸载一个版本。小菜一碟。谢谢。


-2

我遇到了同样的问题:VM VM / java / lang / NoClassDefFoundError初始化期间发生错误:java / lang / Object

请按照以下步骤解决问题:

步骤1.转到C:\ Program Files \并搜索Java文件夹。

步骤2.删除C:\ Program Files \ Java文件夹。

步骤3.从http://www.oracle.com/technetwork/java/javase/downloads/index.html下载适用于您的32位/ 64位版本的新Jdk

步骤4.安装JDK

步骤5:现在将JAVA_HOME设置为“ C:\ Program Files \ Java \ jdk1.8.0_91”

步骤6:打开命令提示符,然后输入java -version。

有用。


OP提到这里不是JAVA_HOME的问题
Alexandre Beaudet

如果已将JAVA_HOME设置为jdk位置,则无需再次配置。您只需跳过步骤5。只需删除较旧的JDK并安装较新的JDK。
Mahesh Sutar
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.