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-розрядний Java для 64-розрядного

Будь-які ідеї?


2
Здається, є проблема з завантаженням rt.jarфайлу, який вимагається JVMпід час завантаженняJRE
Bhavik Ambani

можливо, деякі проблеми, пов'язані з дозволом?
Марк Брамник

запустіть ферму / стразу, щоб побачити будь-які відсутні файли / дозволи файлів
Jayan

inbytebg.com/techblog/?p=189 , на перший коментар є шістнадцятковий трюк, щоб виправити інсталятор
Себастьян

Відповіді:


186

Ця проблема пов'язана з неправильною установкою 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 установник повинен розпакувати їх. Якщо у вас виникла ця помилка, мабуть, цього не сталося.

Вам потрібно вручну запустити unpack200всі .packфайли в папках JRE lib/та lib/ext/папках.

Windows

Щоб розпакувати один .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.gzзамість цього використовуйте пакет Java.


2
Це питання Solaris, а не Windows.
Робін Кантерс

1
Це рішення допомогло, якщо ви просто завантажите файл архіву java linux та не хочете використовувати сценарії встановлення.
PotOfTea

23
@Robin Kanters, оскільки це точне повідомлення про проблему / помилку, його симптоми та способи їх виправлення є платформово-агностичними, це питання Java RE, а не Solaris.

1
підтвердити наявність цієї проблеми у Windows після того, як Java зробила автоматичне оновлення
Lassi Kinnunen

5
Я завжди просто використовую for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(Можливо, колись я зроблю це трохи більш надійним, щоб мені не довелося вручну змінювати шлях, але потім, як правило, я просто використовую .gzвипуск JRE, який не пакує їх. )
Synetech

31

Для Java 8 в * nix OS перейдіть до <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.


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

Деякі скрипти можуть бути знайдені тут , щоб розпакувати всі відсутні баночки з вручну видобутої JDK: stackoverflow.com/questions/2203922 / ...
Kloe2378231

Це була проблема в моєму випадку. Я використовую Ubuntu 18.04. Дякую!
Бончо Валков

13

Здається, що для 64-розрядної архітектури вам доведеться встановити як 32-бітну версію, так і 64-бітну версію jre (незалежні від архітектури файли як rt.jar поширюються лише в 32-бітній версії).

Тоді не забудьте звернути увагу на те, щоб включити правильну версію Java в глобальну змінну середовища PATH.


3
Де ти це взяв architecture independent files as rt.jar are distributed only in the 32-bin version?
Олександр М

Я щойно вивчив вміст дистрибуції
Томмазо

+1 Так, ти маєш рацію. rt.jar не входить до пакету jre для 64-розрядних solaris.
Олександр М

3
Щоб додати це - ми зіткнулися з цим під час встановлення вручну на SmartOS. Дотримуйтесь інструкцій, знайдених на blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (здебільшого), і ви все будете в порядку.
Хушил

Я встановив обидва пакети jdk-7u79-solaris-sparcv9.tar.Z та jdk-7u79-solaris-sparc.tar.Z. Зараз схоже, що це працює. Тай.
Алекс Пі

11

Швидке рішення для нетерплячих людей;) На машинах Windows спробуйте це: перейдіть до C:\Windows\System32каталогу та видаліть java.exe(або перейменуйте його на щось подібне java.exe.old).

Принаймні 1.6 java.exeв каталозі Windows не повинно бути а . Якщо є, це залишок від чогось.

Ще трохи читання:

Я дуже здивований, що на запитання 2012 року ще немає затвердженої відповіді, і я фактично зіткнувся з тим же питанням у 2015 році на моїй 32-розрядної ОС Win 7!

То що ж сталося?

В основному все працювало нормально, я завантажив базу даних 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

Добре помічений! У мене встановлено JDK 1.6.0_26, і "новіша" версія прийшла з папки Windows System32. Обидва знаходяться в змінній середовищі PATH, і я фактично не хочу використовувати Java, що виконується під час виконання Java. Тому її видалення вирішило питання. Можливо, у вас також є два режими виконання Java у вашому ПАТХ?
iaforek

Для мене в моїй установці відсутній rt.jar (саме там ви знайдете java.lang.Object). На жаль, коли я встановлюю RPM від kickstart, у нього відсутній rt.jar, але якщо я встановлю після нього, смішна проблема мати.
Centimane

Я не можу допомогти тобі з обертами. Вибач за це.
iaforek

4
Для мене символічні посилання на java in 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-бітну установку, ви будете бракувати певних файлів у встановленні, і ви отримаєте помилки, такі як вище.


Це частина відповіді. Вам потрібно розпакувати всі файли * .pack у каталозі / lib та lib / ext вашого шляху SDK до Java. 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файл; якщо це правда, видаліть цей файл.

Введення тексту зараз java -versionпрацює чудово.


2
У мене така ж проблема після оновлення Windows, проте у мене немає папки C:\Program Files\Java Folder\bin. Натомість я використовую, C:\Program Files\Java\jdk1.8.0_161\binале це мені ніяк не допомагає. У папці System32 немає файлу java.exe
Том,

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

якщо ви зробите "chmod u + rx" на двійковому файлі Java і запустіть його, він розпакує файли jar і ви зможете зробити java -версію без помилок виконання


3

Ви не можете встановити лише 64-бітний, спочатку потрібно встановити 32-бітний, а потім додати 64-бітні компоненти.

З сайту java.com:

Установка JRE в 64-бітній системі, яка дозволяє 32-розрядний JVM, - це двоетапний процес: спочатку встановіть 32-розрядний JRE, а потім встановіть додаткову підтримку 64-бітних операцій. Назви файлів такі:


ОП нічого не згадує про запуск 32-розрядного JVM на 64-бітній системі ...?
wookie919

1

Якщо ви встановите 64-бітну версію, не встановивши попередньо 32-бітну, ця помилка стане, незважаючи на виправлення всіх інших проблем. У мене абсолютно новий 64-розрядний апарат Dell i7 з Windows 10 Pro, на якому працює Java 8u71. Після додавання мого% path% та% classpath% до змінних оточення та спробування декількох інших виправлень, видалення 64-бітного, встановлення 32-бітного та перевстановлення 64-бітного виправлене.

Деякі проблеми, як-от нерозпакування файлів тощо, які були вказані як можливі причини, все ще можуть спричиняти проблеми, але якщо ви цього не зробите, також інші виправлення не працюватимуть.


1

У моєму випадку я використовую Windows 8.1 (встановлений jdk1.8.0_77), я зробив три речі:

  1. Я видалив попередні jdks
  2. Я перейменував файл java.exe всередині C: \ Windows \ System32
  3. Я також видалив C: \ ProgramData \ Oracle \ Java \ javapath у своєму PATH (ехо% PATH%)

і вуаля це виправили!



0

Іншою відповіддю може бути використання файлу tar.gz замість цього у випадку Linux. Здається, щось подібне є і для платформи solaris. Таким чином, усі файли вже будуть у очікуваному форматі, і не буде жодних проблем з розпакуванням.


Що ви хочете використовувати замість цього файлу tar.gz?
Корай Тугай

Зважаючи на те, що я відповів на це близько 2,5 років тому, мені довелося озирнутися на сайт завантаження Java. Там у вас є вибір завантажити java або як упакований на зразок .rpm для LinuX. Думаю, я спробував це раніше і зіткнувся з неприємностями. Замість файлу tar.gz замість цього працював краще, оскільки весь вміст у ньому був у бажаному форматі файлу.
Ритмічна

0

У мене є певна проблема в установках Linux x86_64 з JDK 1.7.0_40 i586. Я зрозумів, що проблема полягає в тому, що 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.

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
Труба

0

Швидке виправлення, яке працювало для мене:

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

0

Я виявив, що ця помилка сталася, коли я витягував файл .rpm.

Потім я видалив цю папку та завантажив jdk-7u79-linux-x64.tar.gz для Linux 64 та витягнув натомість вміст цього файлу. Також: експортувати JAVA_HOME = / opt / java / jdk1.7.0_79 експортувати JDK_HOME = / opt / java / jdk1.7.0_79 експортувати PATH = $ {JAVA_HOME} / бін


0

Просто встановіть jre ще раз . Це просто вирішило мою проблему. (Пакет запуску SonarQube почав видавати цю помилку після того, як я встановив jdk)


0

Перейдіть на панель керування, видаліть пов’язані з java речі (закрийте затемнення, якщо вони відкриті), потім перевстановіть java та відкрийте затемнення, очистіть проекти.


Downvote. ОП очевидно не на платформі Windows.
пітер

0

Просто зробив це на Solaris і зіткнувся з цією ідентичною проблемою, коли навіть "java -версія" не працює. Є причина, що 64-розрядні версії дистрибутива на ЧАС менше, ніж у 32-бітових. Це дійсно так, як сказано вище:

Іншими словами, щоб отримати повністю працюючу 64-бітну інсталяцію, спочатку потрібно запустити 32-бітну установку і слідувати цим за допомогою 64-бітної установки, якщо у вас є 64-бітна машина, здатна ...

Тому я запустив інсталятор для 32-розрядного:

ш jdk-6u131-solaris-sparc.sh

Потім я запустив інсталятор для 64-розрядних:

ш 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

Java sparcv9 - це 64-бітова версія, і вони працюють з "-версією", коли встановлюються поряд з 32-бітовим JDK.

  • ./jdk1.6.0_131/bin/sparcv9/java -версія
  • версія java "1.6.0_131"
  • Java (TM) SE Runtime Environment (збірка 1.6.0_131-b32)
  • 64-розрядний сервер VM сервера Java HotSpot (TM) (збірка 20.131-b32, змішаний режим)

-Дан


Щоправда, але питання з 2012 року, і ми не знаємо платформи ОП. Він має на увазі /usr/javaтак, що це, очевидно, Linux / Unix, як ОС. Ви маєте рацію, що встановлення Java Solaris відрізнялося від будь-якої іншої ОС до Java8. Ви в основному повинні були встановити спочатку 32-бітний пакет, а потім 64-бітний пакет поверх нього. Але це все в минулому зараз, коли 32-розрядна Java вже не підтримується на Solaris, як це сказано в Mac OS X.
вівторок

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. Відкрийте проект затемнення> клацніть правою кнопкою миші> Goto Proprieties> У бібліотеках> Тепер видаліть системну бібліотеку JRE> Клацніть на Додати бібліотеку> виберіть "Системна бібліотека JRE"> Клацніть на Далі> Виберіть "JRE (jre1.8.x_xxx)"> закінчити

Моя проблема вирішена :) Сподіваюся, вона допоможе вам :)



0

Отже, я все намагався, і нарешті здається, що перевстановлення Java після її видалення вирішило мою проблему.


0

якщо є якась версія для інсталяційної версії JAVA

C: \ Де JAVA

дасть розташування java, яке він підбирає. Якщо у вас є інший шлях, крім встановлення, видаліть ці файли або перейменуйте його (можливо, як _backup). ви отримаєте належну версію файлу java.


-1

Я стикався з тією ж проблемою, я встановив дві версії Java, отже це спричинило цю проблему. щоб підтвердити це, перейдіть і натисніть значок Java на панелі керування, якщо не відкривається, тоді питання те саме, просто зайдіть та видаліть одну версію. шматок торту. Дякую.


-2

Я зіткнувся з тією ж проблемою: сталася помилка під час ініціалізації VM java / lang / NoClassDefFoundError: java / lang / Object

Для вирішення проблеми виконайте наведені нижче дії.

Крок 1. Перейдіть на C: \ Program Files \ і знайдіть папку Java.

Крок 2. Видаліть папку C: \ Program Files \ Java.

Крок 3. Завантажте новий Jdk для вашої версії 32 біт / 64 біт з http://www.oracle.com/technetwork/java/javase/downloads/index.html

Крок 4. Встановіть JDK

Крок 5: Тепер встановіть JAVA_HOME на "C: \ Program Files \ Java \ jdk1.8.0_91"

Крок 6: Відкрийте командний рядок і введіть java -версію.

Це працює.


ОП зазначила, що проблема JAVA_HOME тут не була
Олександр Боде

Не потрібно знову налаштовувати JAVA_HOME, якщо для нього вже встановлено jdk location. Ви можете просто пропустити крок 5. Просто видаліть старіший JDK та встановіть новіший.
Махеш Сутар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.