首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

解決 JDK 錯誤:Error occurred during initialization of VM - NoClassDefFoundError: java/lang/Object

     編輯:Java 相關知識

問題現象

安裝舊版 J2SDK 1.4.2(從 Oracle 歸檔下載),配置好環境變量後執行 java -version 報錯:

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

根因分析

檢查 $JAVA_HOME/lib 和 $JAVA_HOME/jre/lib 發現:
缺少 tools.jar 和 rt.jar,取而代之的是 tools.pack 和 rt.pack。
這是舊版 JDK 為減小體積採用的 Pack200 壓縮格式,首次使用需解包。

解決方案:使用自帶 unpack 工具解包

# 1. 進入 lib 目錄
cd /usr/java/j2sdk1.4.2/lib

# 2. 解包 tools.pack → tools.jar
unpack tools.pack tools.jar

# 3. 進入 jre/lib
cd ../jre/lib

# 4. 解包 rt.pack → rt.jar(使用上級目錄的 unpack)
../../unpack rt.pack rt.jar

驗證結果

# 檢查生成的 jar
ls -l /usr/java/j2sdk1.4.2/lib/tools.*
# -rw-r--r-- 1 root root 5092901 ... tools.jar
# -rw-r--r-- 1 root root 1743428 ... tools.pack

ls -l /usr/java/j2sdk1.4.2/jre/lib/rt.*
# -rw-r--r-- 1 root root 26782544 ... rt.jar
# -rw-r--r-- 1 root root  8684102 ... rt.pack

# 再次運行
java -version
# java version "1.4.2"
# Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
# Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)

核心知識點

  • rt.jar:Java 運行時核心類庫(含 java.lang.Object 等基礎類)
  • tools.jar:編譯器、調試器等工具類
  • Pack200:JDK 1.4+ 引入的類文件壓縮格式,unpack 為對應解壓工具
  • 現代 JDK(8+)已改用模塊化 jimage 格式,無此問題

避坑提示

  1. 下載舊版 JDK 必須從 Oracle 官方歸檔頁面:Java Archive
  2. 安裝後若 java -version 失敗,優先檢查 lib/rt.jar 是否存在
  3. 生產環境嚴禁使用 EOL 版本,僅限歷史項目維護測試

記住:缺 rt.jar 必報 NoClassDefFoundError: java/lang/Object,解包即愈!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved