Странное "java.lang.NoClassDefFoundError" в Eclipse - PullRequest
42 голосов
/ 10 февраля 2010

У меня есть проект Java в Eclipse, который прекрасно работает до сегодняшнего дня, пока я не обновил некоторые файлы (включая файл ant build.xml).Когда я собираю проект, появляется следующая ошибка:

java.lang.NoClassDefFoundError: proj/absa/FrontEnd/ApplicationStarter
Caused by: java.lang.ClassNotFoundException: proj.absa.FrontEnd.ApplicationStarter
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source) at
    java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)  
Exception in thread "main" 

У кого-нибудь есть подсказка, где может быть проблема?

Ответы [ 21 ]

1 голос
/ 08 июля 2011

Это, похоже, распространенная ошибка. Решение:

  • щелкните правой кнопкой мыши проект
  • выбрать недвижимость
  • выберите «Java Compiler»
  • снимите галочку с первого поля с надписью «Включить настройки проекта»
  • 1012 * применить *
  • сохранение
  • пробег

Надеюсь, это поможет в некоторых случаях.

1 голос
/ 05 января 2012

Удар в темноте, но у меня точно такая же проблема. Я решил это, удалив проект из моей рабочей области (будьте осторожны, чтобы не удалить с диска), а затем повторно импортировал проект, и он работал нормально. Я думаю, что мой был вызван плохим закрытием окон (перезапуск окон правильно не исправил проблему). НТН.

1 голос
/ 20 октября 2011

Хотя это идиотское предположение, и оно может быть неприменимо в вашей конкретной ситуации, это могло бы сэкономить мне час или около того.

В случае, если вы «преобразовали» простой проект в проект Java (отредактировав файл .project и добавив соответствующий тег), убедитесь, что вы также указали правильный объект - мой проект не был собран, даже если Eclipse попытался беги без строителей (успехов!):

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>
0 голосов
/ 03 августа 2016

Другой случай возникновения java.lang.NoClassDefFoundError - во время второй / последующих попыток создания экземпляра класса после того, как первая попытка не удалась для какого-то другого исключения или ошибки. Загрузчик классов, похоже, кеширует сведения о том, что он не смог создать экземпляр класса с первой попытки, но не причина почему. Таким образом он сообщает NoClassDefFoundError.

Поэтому неплохо бы убедиться, что не было ошибок / исключений с более ранней попыткой создания экземпляра класса, прежде чем идти по кроличьей норе, пытаясь устранить неполадки NoClassDefFoundError.

0 голосов
/ 30 марта 2016

Это сработало для меня в затмении :

  1. Перейти к проекту -> Свойства
  2. Нажмите на вкладку «Источник»
  3. Снимите флажок -> Разрешить выходные папки для исходных папок
  4. Применить изменения и запустить проект
0 голосов
/ 06 ноября 2013

АБДУЛХАЕЕ:

NoClassDefFoundError в Java возникает, когда виртуальная машина Java не может найти определенный класс во время выполнения, который был доступен во время компиляции. Например, если у нас есть вызов метода из класса или доступ к любому статическому члену класса, и этот класс недоступен во время выполнения, тогда JVM сгенерирует NoClassDefFoundError. Важно понимать, что это отличается от ClassNotFoundException, который возникает при попытке загрузить класс только во время выполнения, а имя было предоставлено во время выполнения, а не во время компиляции. Многие Java-разработчики смешивают эти две ошибки и запутываются.

Короче говоря, NoClassDefFoundError появится, если класс присутствовал во время компиляции, но не был доступен в пути к классам Java во время выполнения. Обычно вы увидите ниже строку в журнале, когда вы получите NoClassDefFoundError: Исключение в потоке "основной" java.lang.NoClassDefFoundError Исключение в потоке «main» просто означает, что его «основной» поток, который не может найти определенный класс, может быть любым потоком, так что не беспокойтесь. Разница между этой ошибкой, возникающей в основном потоке и другом потоке, заключается в том, что когда исключение в потоке «main» приводит к сбою программы или ее самому отключению, в отличие от другого потока, и в этом случае ваша программа продолжит работу.,

Подробнее: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz2jr35SsaZ

0 голосов
/ 10 февраля 2010

обе проблемы будут из-за classpathref = "master-classpath", пожалуйста, проверьте правильность значения

0 голосов
/ 08 марта 2012

Когда вы запускаете вашу программу, она сохраняет конфигурацию запуска, которую вы можете впоследствии изменить. Если что-то изменилось в процессе сборки / запуска, у вас могут быть неправильные настройки. Например, я работал с maven, а некоторые конфигурации запуска ссылаются на maven2_classpath_container. При удалении конфигурации запуска и повторного запуска программы она может работать снова.

0 голосов
/ 28 октября 2016

Если вы используете Eclipse, попробуйте Project> clean и попробуйте перезагрузить сервер

0 голосов
/ 08 мая 2017

Для меня проблема была в том, что я настроил другую папку в разделе «Запустить конфигурации», в которой был класс без последних изменений. Как только я удалил его, ссылаясь на правильную папку bin, он начал работать. Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...