JRE 1.7 - версия Java - возвращает: java / lang / NoClassDefFoundError: java / lang / Object

135

При запуске любого java-приложения или просто java jvm завершается ошибкой:

Произошла ошибка во время инициализации виртуальной машины
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
может быть, некоторые вопросы, связанные с разрешением?
Марк Брамник
запустите truss / strace, чтобы увидеть все отсутствующие файлы / права доступа к файлам
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.

Rigg802
источник
2
Это вопрос Solaris, а не Windows.
Робин Кантерс
1
Это решение помогло, если вы просто скачали архивный файл java linux и не хотите использовать сценарии установки.
PotOfTea
23
@Robin Kanters, так как это точное сообщение о проблеме / ошибке, ее симптомы и способы ее устранения не зависят от платформы. Это вопрос Java RE, а не Solaris.
1
подтвердите наличие этой проблемы на окнах после того, как Java сделал некоторое автоматическое обновление
Ласси Киннунен
5
Я всегда просто использую for %i in (*.pack) do (..\bin\unpack200 "%i" "%~ni.jar" & del "%i")(Возможно, когда-нибудь я сделаю его немного более устойчивым, чтобы мне не пришлось вручную изменять путь, но, опять же, я обычно просто использую .gzвыпуск JRE, который их не упаковывает. )
Synetech
31

Для Java 8 в ОС * nix перейдите к <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.

betontalpfa
источник
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
Здесь можно найти некоторые сценарии для распаковки всех отсутствующих
jar-файлов
Это была проблема в моем случае. Я использую 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?
Александр М
Я только что изучил содержимое дистрибутива
Tommaso
+1 Да, вы правы. rt.jar не входит в пакет jre для 64-битного соляриса.
Александр М
3
Чтобы добавить к этому - мы столкнулись с этим при ручной установке на SmartOS. Следуйте инструкциям по адресу blogs.oracle.com/thefield/entry/solaris_11_jdk_installation (по большей части), и все будет в порядке.
Хушил
Я установил оба пакета jdk-7u79-solaris-sparcv9.tar.Z и jdk-7u79-solaris-sparc.tar.Z. Теперь похоже, что это работает. Ty.
Алекс Пи
11

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

Начиная java.exeс версии 1.6, в каталоге 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/

iaforek
источник
Я тоже сталкиваюсь с этой проблемой, но похоже, что в вашем случае вы просто используете более старую версию Java. 1.6.0_26! = 1.6.0_45, ваша старая версия, вероятно, просто не имеет проблемы.
Сентиман
Хорошо подмечено! У меня установлен JDK 1.6.0_26 и эта «более новая» версия пришла из папки Windows System32. Оба находятся в переменной окружения PATH, и я на самом деле не хочу использовать предоставленную Windows среду выполнения Java. Поэтому удаление его решило проблему. Может быть, у вас есть две Java-среды выполнения в вашем PATH?
iaforek
Для меня в моей установке отсутствовал rt.jar (где вы найдете java.lang.Object). К сожалению, когда я устанавливаю RPM из кикстарта, в нем отсутствует rt.jar, но если я установлю его после того, как он там, возникнет забавная проблема.
Сентиман
Я не могу помочь вам с RPM. Извини за это.
iaforek
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-разрядный intsaller накладывает (или устанавливает «рядом») существующую 32-разрядную установку. Другими словами, чтобы получить полностью работающую 64-битную установку, вы должны сначала запустить 32-битную установку, а затем выполнить 64-битную установку, если у вас есть 64-битная машина ...

Если вместо этого вы выполните только 64-битную установку, то при установке вы пропустите определенные файлы и получите ошибки, подобные приведенной выше.

user3213415
источник
Это часть ответа. Вам нужно распаковать все файлы * .pack в вашем каталоге / lib и lib / ext вашего пути java SDK. unpack200 может помочь вам в этом. Пожалуйста, смотрите комментарий Rigg802.
danger89
7

В Windows 10 я столкнулся с той же проблемой с JRE 1.8 (8u121).
Typing

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но это не помогает мне в любом случае. Нет файла java.exe в папке System32
Tom
6

Эта проблема возникает, когда вы устанавливаете JDK _uncompressing_вместо _executing_него.

Примером:

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в начало моей переменной окружения path, что испортило мой java. Как только я избавился от этого с пути, это сработало.

developer747
источник
3

если вы выполните «chmod u + rx» в двоичном файле java и запустите его, он распакует файлы jar, и вы можете сделать java-версию без ошибок времени выполнения

Питер Нильсен
источник
3

Вы не можете установить только 64-разрядную версию, сначала необходимо установить 32-разрядную версию, а затем добавить 64-разрядные компоненты.

С java.com:

Установка JRE в 64-битной системе, которая позволяет 32-битную JVM, представляет собой двухэтапный процесс: сначала установите 32-битную JRE, а затем установите дополнительную поддержку для 64-битных операций. Имена файлов следующие:

Эндрю Спир
источник
В OP ничего не говорится о работе 32-битной JVM в 64-битной системе ...?
wookie919
1

Если вы устанавливаете 64-разрядную версию без предварительной установки 32-разрядной, эта ошибка будет возникать, несмотря на устранение всех других проблем. У меня есть новая Dell i7 64-битная машина 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 (echo% PATH%)

и вуаля исправила!

Кашоги
источник
1

Я столкнулся с подобной проблемой и обнаружил, что символическая ссылка в данных программы (C: \ ProgramData \ Oracle \ Java \ javapath) была неправильной. Я дал правильный путь, и это сработало.

Подробная информация о том, как исправить данные программы, доступна здесь.

Шива Камешвара Рао Мунипалле
источник
0

Другим ответом может быть использование файла tar.gz вместо этого в случае Linux. Кажется, что-то подобное есть и для платформы Solaris. Таким образом, все файлы уже будут в ожидаемом формате, и не будет никаких проблем с распаковкой.

ритмическая
источник
Что вы имеете в виду использовать вместо этого файл tar.gz?
Корай Тугай
Учитывая, что я ответил на это около 2,5 лет назад, мне пришлось оглянуться назад на сайт загрузки Java. Там у вас есть возможность скачать java либо в виде пакета, подобного .rpm для LinuX. Я думаю, что попробовал это раньше и столкнулся с проблемой. Вместо этого загрузка файла tar.gz работала лучше, поскольку в нем содержалось все содержимое в нужном формате.
Rythmic
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 об / мин.

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.

scrutari
источник
У меня та же проблема с 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
Liudvikas
источник
0

Я обнаружил, что эта ошибка произошла, когда я извлек файл .rpm.

Затем я удалил эту папку и скачал jdk-7u79-linux-x64.tar.gz для Linux 64 и вместо этого извлек содержимое этого файла. Также: экспорт JAVA_HOME = / opt / java / jdk1.7.0_79 export JDK_HOME = / opt / java / jdk1.7.0_79 export PATH = $ {JAVA_HOME} / bin

user5974531
источник
0

Просто установите JRE снова . Это просто решило мою проблему. (Пакет запуска SonarQube начал выдавать эту ошибку после того, как я установил jdk)

STRATOVARIUS
источник
0

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

Ateeque Shaikh
источник
Downvote. ОП явно не на платформе Windows.
Петер
0

Просто сделал это на Solaris и столкнулся с такой же проблемой, где даже "Java-версия" не работает. Существует причина, по которой 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-битные версии, и они работают с «-version» при установке вместе с 32-битным JDK.

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

Дан

user7323228
источник
Правда, но вопрос с 2012 года, и мы не знаем платформу ОП. Он имеет в виду, /usr/javaтак что это явно ОС Linux / Unix. Вы правы в том, что установка Java в Solaris отличалась от любой другой ОС вплоть до Java8. Вы должны были установить сначала 32-битный пакет, а затем 64-битный пакет поверх него. Но это все в прошлом, когда 32-битная Java больше не поддерживается в Solaris, подобно Mac OS X.
peterh
0

В окне 10 уже есть путь, представленный в env как C:\>ProgramData\Oracle\Java\javapath содержит символические ссылки на исполняемые файлы.

Когда я устанавливаю новую версию и удаляю ее из переменной среды, мой проект начинает показывать ее.

Я использую затмение кислорода в окне 10

Чтобы решить это: -

  1. Я просто удаляю путь C:\>ProgramData\Oracle\Java\javapathиз переменной среды и добавляю новые env как JAVA_HOME и% JAVA_HOME% / bin в path

  2. Я переустановить JDK с правами администратора (удалить предыдущую папку JRE)

  3. Откройте ваш проект eclipse> щелкните правой кнопкой мыши> Перейти к свойствам> В библиотеках> Теперь удалите системную библиотеку JRE> Нажмите «Добавить библиотеку»> выберите «Системная библиотека JRE»> Нажмите «Далее»> Выбрать «JRE рабочей области по умолчанию (jre1.8.x_xxx)»> финиш

Моя проблема решена :) Надеюсь, это поможет вам :)

Шубхам Джайн
источник
0

Итак, я продолжал пробовать все, и, наконец, кажется, что переустановка Java после удаления исправила мою проблему.

Плабон Датта
источник
0

если какие-либо проблемы для версии установки JAVA

C: \ Где JAVA

даст местоположение java, которое он собирает. Если у вас есть какой-либо путь, отличный от вашей установки, удалите эти файлы или переименуйте его (может быть как _backup). вы получите правильную версию файла Java.

SumataPatil
источник
-1

Я столкнулся с той же проблемой, я установил две версии Java, следовательно, это вызвало эту проблему. чтобы подтвердить это, перейдите и нажмите значок Java на панели управления, если не открывается, то проблема та же, просто перейдите и удалите одну версию. Кусок пирога. Спасибо.

Сринивасан Елангован
источник
-2

Я столкнулся с той же проблемой: ошибка произошла во время инициализации виртуальной машины 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 -version.

Оно работает.

Махеш Сутар
источник
ОП упомянул, что JAVA_HOME здесь не проблема
Александр Боде
Нет необходимости снова настраивать JAVA_HOME, если он уже настроен на местоположение jdk. Вы можете просто пропустить Шаг 5. Просто удалите старый JDK и установите новый.
Махеш Сутар