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

当运行任何 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. The symbolic links in /usr/java all point to the correct java installation

  5. I did not install any 'default' java when I created the system

  6. java -version fails...same error as above

  7. Issuing the commands from under the directory structure of the java installation does not work either

  8. This is 64-bit java for a 64-bit

Any ideas?

254336 次浏览

对于64位架构,似乎必须同时安装32位版本和64位版本的 jre (与架构无关的文件 rt.jar 只在32位版本中发布)。

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

这个问题源于不正确的 Java 安装。

可能性1

注意: 此场景仅适用于 Java8和之前的版本。从 Java9开始,JRE 的结构就不同了。Jar 和好友不再存在,Pack200也不再使用。

Java 标准库包含在各种 JAR 中,例如 rt.jardeploy.jarjsse.jar等等。在打包 JRE 时,这些关键的 JAR 文件用 200包压缩,并以 rt.packdeploy.packjsse.pack等形式存储。Java 安装程序应该解压缩它们。如果您正在经历这个错误,显然这并没有发生。

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

窗户

要解压一个 .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"

* nix

要解压一个 .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 包。

另一个解决方案是在 Linux 中使用 tar.gz 文件。Solaris 平台似乎也有类似的东西。这样,所有的文件都已经是预期的格式,不会有任何解压缩问题。

我在使用 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。

您很可能在安装中遗漏了一个名为 rt.jar 的文件,该文件包含 java.lang 的类文件。反对。检查你的安装文件等。

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

如果只进行64位安装,那么在安装过程中将会丢失某些文件,并且会出现上面这样的错误。

对于 * nix 操作系统上的 Java8,转到 <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 时出现版本问题,请使用与您正在修复的 JRE 附带的相同的 unpack200——也就是说,从命令行使用 ../../bin/unpack200(对我来说,它扩展为 /usr/java/jdk1.8.0_05/bin/unpack200) ,而不仅仅使用 unpack200

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

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

来自 java.com:

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

对于缺乏耐心的人,快速解决方案 ;)在 窗户机器上,试试这个: 转到 C:\Windows\System32目录并删除 java.exe(或者将其重命名为类似于 java.exe.old的内容)。

至少从1.6开始,Windows 目录中不应该有 java.exe。如果有的话,那就是某种东西的残留物。

更多阅读:

我真的很惊讶2012年的一个问题还没有得到认可的答案,而且我在2015年的 Win 732位操作系统上也遇到了同样的问题!

到底发生了什么?

基本上一切正常,我下载了 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/

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

例如:

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


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

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

我最近也有同样的问题。在我的例子中,我的 windows 7机器自动下载了 java,并在路径环境变量的开头添加了 C:\ProgramData\Oracle\Java\javapath,这搞乱了我的 java。一旦我把它从路径中除去,它就起作用了。

如果没有首先安装32位版本就安装了64位版本,那么尽管修复了所有其他问题,还是会出现这个错误。我有一台全新的戴尔 i764位 Windows10专业版机器,运行 Java8u71。在将% path% 和% classspath% 添加到环境变量并尝试其他几个修复程序之后,卸载64位,安装32位,然后重新安装64位修复程序。

一些问题,比如没有解压缩文件,等等,已经提到的可能的原因可能仍然导致问题,但是如果你不这样做,以及,其他的修复不会工作。

对我有效的快速解决方法:

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

我发现在提取.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

我今天下载了新的 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,而且成功了。

所以,在 PATH的文件夹之一必须有 java.exe是造成冲突,我想。事实证明,正是 C:\>ProgramData\Oracle\Java\javapath符号链接保存到可执行文件中。

java.exe指向 jre\bin。当我启动 \jre\bin\java.exe时,文件已损坏——完全相同的错误。找到了。我重新安装了 JRE,问题就解决了。编程愉快。

在我的例子中,我使用了 windows 8.1(安装了 jdk1.8.0 _ 77) ,我做了三件事:

  1. 我删除了之前的 JDK
  2. 我在 C: Windows System32中重命名了 java.exe 文件
  3. 我还在 PATH 中删除了 C: ProgramDataOracleJavajavapath (echo% PATH%)

瞧,修好了!

我面临着同样的问题: 在初始化 VM 时发生了错误 Java/lang/NoClassDefFoundError: java/lang/Object

采取以下步骤解决问题:

步骤1. Goto 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 Javajdk1.8.0 _ 91”

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

有用。

我也遇到过类似的问题,发现程序数据中的符号链接(C: ProgramDataOracleJavajavapath)是错误的。我已经给出了正确的路径,它工作。

有关如何更正程序数据的详细信息,请点击这里

我面临同样的问题,我已经安装了两个 Java 版本,因此它造成了这个问题。要确认这一点去,并点击控制面板中的 java 图标,如果不打开那么问题是相同的,只是去和卸载一个版本。小菜一碟。谢谢。

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

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

在 Solaris 上就是这样做的,然后遇到了同样的问题,即使是“ java 版本”也不能工作。64位版本的发行版比32位版本小很多,这是有原因的。确实如上所述:

换句话说,要获得一个完全工作的64位安装,您必须首先运行32位安装,然后如果您有一台64位的机器,那么必须运行64位安装..。

所以我运行了32位的安装程序:

Jdk-6u131-solaris-sparc.sh

然后我运行了64位的安装程序:

Jdk-6u131-solaris-sparcv9.sh

这给了我几个可选的 java 可执行文件:

  • $发现。-名字爪哇
  • ./jdk1.6.0 _ 131/db/demo/program/score/java
  • ./jdk1.6.0 _ 131/db/demo/program/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 (商标)系统工程执行期函式库(build 1.6.0 _ 131-b32)
  • Java HotSpot (TM)64位服务器 VM (build 20.131-b32,混合模式)

在 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它工作正常。

在窗口10中,env 中已经有一个路径 C:\>ProgramData\Oracle\Java\javapath,它保存到可执行文件的符号链接。

当我安装一个新版本并从我的环境变量中删除它时,我的 all 项目就会开始显示它。

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

要解决这个问题:-

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

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

  3. 打开您的 Eclipse 项目 > 右键单击 > Goto Proprities > 在库中 > 现在删除 JRE 系统库 > 单击添加库 > 选择“ JRE 系统库”> 单击下一步 > 选择“ Workspace default JRE (jre1.8.x _ xxx)”> Finish

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

这修复了我在 CentOS 上的问题

sudo yum install java-1.8.0-openjdk-devel

也请参阅 在 CentOS 6中设置 JAVA _ HOME 和 CLASSPATH

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

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

C: 哪里 JAVA

会给出它拾取爪哇的位置。如果除了安装之外还有其他路径,请删除这些文件或重命名它(可以是 as _ backup)。你会得到正确的 java 文件版本。

我在 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