JRE 1.7 возвращает: java/lang/NoClassDefFoundError: java/lang/Object

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

Ошибка при инициализации виртуальной машины
java/lang/NoClassDefFoundError: java/lang/Object

Вот список неправильных ответов:

  • Верный домашний каталог Java, включая каталог /bin, находится в глобальной PATH

  • JAVA_HOME устанавливается правильно

  • Выполнение команды java -fullversion работает

    $ java -fullversion
    
    ./java full version "1.7.0_05-b05"
    
  • Символьные ссылки в /usr/java указывают на правильную установку java

  • Я не устанавливал Java по умолчанию, когда создал систему

  • java -version не работает... такая же ошибка, как указано выше

  • Выдача команд из-под структуры каталогов java-установки не работает.

  • Это 64-разрядная Java для 64-разрядного

Любые идеи?

Ответ 1

Проблема возникает из-за неправильной установки Java (например, установка без прав администратора или просто распаковка tools.zip).

Вы можете удалить, затем переустановить Java с помощью установщика и/или более привилегий или попробовать следующее:

Проверьте папку JDK для файлов *.pack в jre/lib и jre/lib/ext например rt.pack (по умолчанию используется c:\nameof_jdk_folder\jre\lib для Microsoft Windows и /usr/java/lib для Unix/GNU Linux)

Те файлы *.pack должны быть распакованы в файлы .jar с помощью этой команды:

  • Для Windows:

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

  • Для * nix аналогичная командная строка распаковывает файлы:

    cd /usr/java/lib

    /usr/bin/unpack200 rt.pack rt.jar

и повторите этот шаг со всеми файлами *.pack и перезапустите свою программу.

Ответ 2

Для java 8 @* ОС NIX:

Из каталога "<jdk1.8_root>/jre/lib" (для меня это:/usr/java/jdk1.8.0_05/jre/lib)

Run:

 ../../bin/unpack200 rt.pack rt.jar
 ../../bin/unpack200 jsse.pack jsse.rar
 ../../bin/unpack200 charsets.pack charsets.jar

(Возможно, вы не можете использовать систему unpack200, вызывая проблемы с версией.) Этот файл unpack200 находится в каталоге java 8 (для меня:/usr/java/jdk1.8.0_05/bin)

Бенедек

Ответ 3

Кажется, что для 64-битной архитектуры вам необходимо установить 32-разрядную версию и 64-разрядную версию jre (независимые от архитектуры файлы, такие как rt.jar, распространяются только в 32-разрядной версии).

Помните, что обратите внимание на включение корректного исполняемого файла Java в глобальную переменную среды PATH.

Ответ 4

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

Поскольку не менее 1,6, в каталоге Windows не должно быть java.exe. Если есть, то это от чего-то осталось.

Немного больше:

Я действительно удивлен, что вопрос с 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/

Ответ 5

Скорее всего, вам не хватает файла с именем rt.jar в вашей установке, который имеет файл класса для java.lang.Object. Проверьте файлы установки и т.д.

В частности, обратите внимание, что 64-разрядный intsaller накладывает (или устанавливает "рядом с" ) существующую 32-битную установку. Другими словами, чтобы получить полностью работоспособную 64-битную установку, вы должны сначала запустить 32-разрядную установку и следовать этому с помощью 64-разрядной установки, если у вас есть 64-битная машина...

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

Ответ 6

Я загрузил новый 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, и проблема исчезла. Счастливое кодирование...

Ответ 7

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

Пример:

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

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

В первом сценарии библиотеки времени выполнения, такие как rt.jar, не получают автоматически uncompresessed (таким образом, вы можете найти файлы rt.pack и т.д. вместо .jar).

Ответ 8

У меня была такая же проблема в последнее время. В моем случае моя машина Windows 7 автоматически загрузила java и добавила C:\ProgramData\Oracle\Java\javapath в начало моей переменной окружения, которая испортила мою java. Как только я избавился от этого пути, он сработал.

Ответ 9

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

От java.com:

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

Ответ 10

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

Ответ 11

В 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:\System\Windows32 файл java.exe; если true, удалите этот файл.

Ввод текста java -version работает нормально.

Ответ 12

Если вы установите 64-разрядную версию без предварительной установки 32-разрядной версии, эта ошибка произойдет, несмотря на устранение всех других проблем. У меня есть новый 64-разрядный 64-разрядный Windows 7 Pro с операционной системой Java 8u71. Добавив мои% path% и% classpath% к переменным окружения и попробовав несколько других исправлений, удалите 64-разрядную версию, установив 32-битную, а затем переустановив 64-битную исправленную.

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

Ответ 13

В моем случае я использую Windows 8.1 (установленный jdk1.8.0_77), я сделал три вещи:

  • Я удалил предыдущие jdks
  • Я переименовал файл java.exe внутри C:\Windows\System32
  • Я также удалил C:\ProgramData\Oracle\Java\javapath в своем PATH (echo% PATH%)

и вуаля исправила это!

Ответ 15

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

Ответ 16

У меня есть некоторая проблема при установке x86_64 Linux с 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, который не относится к rpm-дискам 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.

Ответ 17

Быстрое исправление, которое сработало для меня:

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

Ответ 18

Я обнаружил, что эта ошибка возникла, когда я извлек файл .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   export PATH = ${JAVA_HOME}/bin

Ответ 19

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

Ответ 20

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

Ответ 21

Просто сделал это на Solaris и столкнулся с этой идентичной проблемой, где даже "java -version" не работает. Существует причина того, что 64-разрядные версии дистрибутива WAY меньше 32-бит. Это действительно так, как указано выше:

Другими словами, чтобы получить полностью работоспособную 64-битную установку, вы должны сначала запустить 32-разрядную установку и следовать этому с помощью 64-разрядной установки, если у вас есть 64-битная машина...

Итак, я запустил установщик для 32-разрядного:

sh jdk-6u131-solaris-sparc.sh

Затем я запустил установщик для 64-битного:

sh jdk-6u131-solaris-sparcv9.sh

Это дает мне несколько исполняемых файлов java на выбор:

  • $find. -name java
  • ./jdk1.6.0_131/дб/демо/программы/оценки/Java
  • ./jdk1.6.0_131/дб/демо/программы/vtis/Java
  • ./jdk1.6.0_131/бен/Java
  • ./jdk1.6.0_131/бен/sparcv9/Java
  • ./jdk1.6.0_131/JRE/бен/Java
  • ./jdk1.6.0_131/JRE/бен/sparcv9/Java

Sparcv9 java - это 64-битные версии, и они работают с "-версией" при установке рядом с 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)
  • 64-разрядная серверная виртуальная машина Java HotSpot TM (сборка 20.131-b32, смешанный режим)

Дан

Ответ 22

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

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

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

Чтобы решить эту проблему: -

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

  • Я переустанавливаю jdk с правами администратора (удаляю предыдущую папку JRE)

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

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

Ответ 24

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

Ответ 25

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

Он работает.

Ответ 26

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