140

当运行任何 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

有任何想法吗?

4

28 回答 28

190

This problem stems from an improper Java installation.

Possibility 1

NOTE: This scenario only applies to Java 8 and prior. Beginning with Java 9, the JRE is structured differently. rt.jar and friends no longer exist, and Pack200 is no longer used.

The Java standard library is contained in various JARs, such as rt.jar, deploy.jar, jsse.jar, etc. When the JRE is packaged, these critical JAR files are compressed with Pack200 and stored as rt.pack, deploy.pack, jsse.pack, etc. The Java installer is supposed to uncompress them. If you are experiencing this error, apparently that didn't happen.

You need to manually run unpack200 on all .pack files in the JRE's lib/ and lib/ext/ folders.

Windows

To unpack one .pack file (for example rt.pack), run:

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

To recursively unpack all .pack files, from the JRE root run:

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

*nix

To unpack one .pack file (for example rt.pack), run:

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

To recursively unpack all .pack files, from the JRE root run:

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

Possibility 2

You misinstalled Java in some other way. Perhaps you installed without admin rights, or tried to simply extract files out of the installer. Try again with the installer and/or more privileges. Or, if you don't want to use the installer, use the .tar.gz Java package instead.

于 2013-01-23T12:51:17.840 回答
30

对于 *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 随附的相同版本 - 也就是说,从命令行,使用../../bin/unpack200(对我来说,这扩展为/usr/java/jdk1.8.0_05/bin/unpack200),而不仅仅是unpack200.

于 2014-06-16T11:18:37.517 回答
13

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

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

于 2012-10-10T08:32:12.537 回答
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/

于 2015-06-01T15:38:44.920 回答
10

我今天下载了新的 JDK(1.8.0.73)启动c:> java.exe并得到了臭名昭著的:

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

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

当我 cd'ied 进入该jdk\bin文件夹时,Java 会运行良好,所以我知道它是PATH. 我设置PATH\jdk\binCMD 来证明它并且它有效。

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

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

于 2016-03-04T01:33:42.763 回答
8

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

特别要注意,64 位安装程序会覆盖(或安装“旁边”)现有的 32 位安装。换句话说,要获得完全工作的 64 位安装,您必须首先运行 32 位安装,然后如果您有一台支持 64 位的机器,则安装 64 位...

相反,如果您只进行 64 位安装,您将在安装中丢失某些文件,并会出现上述错误。

于 2014-01-20T00:44:54.240 回答
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文件;如果为真,则删除该文件。

现在输入java -version它工作正常。

于 2017-03-23T09:35:49.127 回答
6

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

举例:

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

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

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

于 2015-10-06T10:52:36.937 回答
4

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

于 2016-01-25T22:03:43.577 回答
3

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

来自 java.com:

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

于 2014-08-21T21:06:49.100 回答
3

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

于 2014-08-20T14:19:05.313 回答
1

如果您在没有先安装 32 位的情况下安装 64 位版本,尽管修复了所有其他问题,但仍会出现此错误。我有一台运行 Java 8u71 的全新 Dell i7 64 位 Windows 10 Pro 机器。在将我的 %path% 和 %classpath% 添加到环境变量并尝试其他几个修复后,卸载 64 位,安装 32 位然后重新安装 64 位修复它。

一些已被提及为可能原因的问题,例如未解包文件等,可能仍会导致问题,但如果您不这样做,其他修复程序也将不起作用。

于 2016-01-27T05:33:16.937 回答
1

我遇到了类似的问题,发现程序数据(C:\ProgramData\Oracle\Java\javapath)中的符号链接是错误的。我已经给出了正确的路径并且它有效。

有关如何更正程序数据的详细信息,请参见此处

于 2016-08-08T07:22:47.627 回答
1

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

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

瞧,它修好了!

于 2016-04-04T11:07:07.917 回答
0

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

于 2013-09-23T15:45:36.780 回答
0

我在使用 JDK 1.7.0_40 i586 安装 x86_64 Linux 时遇到了一些问题。我发现问题在于 rpm 无法解压缩 jar 文件,正如 Rigg802 所提到的(尽管 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。

于 2013-10-15T08:17:42.523 回答
0

这解决了我在 CentOS 上遇到的问题

sudo yum install java-1.8.0-openjdk-devel

另请参阅在 CentOS 6 中设置 JAVA_HOME 和 CLASSPATH

于 2018-01-26T18:19:57.703 回答
0

转到控制面板,卸载java相关的东西(如果打开则关闭eclipse),然后重新安装java并打开eclipse,清理项目。

于 2016-09-30T07:32:27.877 回答
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 运行时环境 (build 1.6.0_131-b32)
  • Java HotSpot(TM) 64 位服务器 VM(内部版本 20.131-b32,混合模式)

-担

于 2016-12-20T23:03:06.037 回答
0

对我有用的快速修复:

for file in $(find "$JAVA_HOME" -name "*pack")
do 
    unpack200 "${file}" "${test_file/%pack/jar}";
done
于 2016-01-27T14:34:54.480 回答
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

于 2016-02-24T12:38:12.483 回答
0

只需再次安装 jre 即可。它简单地解决了我的问题。(我安装jdk后SonarQube启动批处理开始报这个错误)

于 2016-08-24T22:43:49.050 回答
0

我在 Redhat Linux 7 中遇到了同样的问题。这已通过删除、安装以下 RPM 并重新加载终端来解决。

java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64 
java-1.8.0-openjdk-devel-1.8.0.232.b09-0.el7_7.x86_64
java-1.8.0-openjdk-headless-1.8.0.232.b09-0.el7_7.x86_64

于 2021-03-23T07:01:10.723 回答
0

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

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

我在窗口 10 中使用日食氧气

要解决它: -

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

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

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

我的问题已经解决了:)希望对您有所帮助:)

于 2017-06-29T08:47:20.593 回答
0

所以,我继续尝试一切,最后似乎在卸载 java 后重新安装它解决了我的问题。

于 2018-01-28T23:05:56.820 回答
0

如果 JAVA 安装版本有任何问题

C:\JAVA

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

于 2019-11-14T07:15:09.307 回答
-1

我遇到了同样的问题,我安装了两个 java 版本,因此导致了这个问题。要确认这一点,请单击控制面板中的 java 图标,如果未打开则问题相同,只需卸载一个版本即可。小菜一碟。谢谢。

于 2016-08-09T12:36:54.097 回答
-2

我面临同样的问题: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。

有用。

于 2016-06-28T08:41:37.983 回答