java.lang.NoClassDefFoundError - PullRequest
       7

java.lang.NoClassDefFoundError

7 голосов
/ 08 апреля 2011

Я изучаю Java, у меня проблемы с запуском примера программы.

У меня есть два файла:

GoodDog.java:

    class GoodDog {
    private int size;
    public int getSize() {
      return size;
    }

    public void setSize(int s) {
      size = s;
    }

    void bark() {
      if (size > 60) {
        System.out.println("Wooof! WoooF!");
      } else if (size > 14) {
        System.out.println("Ruff! Ruff!");
      } else {
        System.out.println("Yip! Yip!");
      }
    }
}

GoodDogTestDrive.java:

    class GoodDogTestDrive {
    public static void main (String[] args) {
      GoodDog one = new GoodDog();
      one.setSize(70);
      GoodDog two = new GoodDog();
      two.setSize(8);
      System.out.println("Dog one: " + one.getSize () );
      System.out.println("Dog two: " + two.getSize () );
      one.bark();
      two.bark();
    }
}

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

nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ java GoodDogTestDrive.class
java.lang.NoClassDefFoundError: GoodDogTestDrive/class
Exception in thread "main" nephi-shields-mac-mini:/Developer/MyProjects/GoodDog nephishields$ 

Что я делаю не так?

Ответы [ 7 ]

16 голосов
/ 08 апреля 2011

Не включайте .class в команду:

java GoodDogTestDrive
12 голосов
/ 28 мая 2013

Важно отметить, что, хотя решение было простым для этого проблемного случая (простое удаление .class из командной строки Java), java.lang.NoClassDefFoundError может быть трудно точно определить в контекстеРазработки Java-приложений.

Это исключение Java означает, что класс Java «во время выполнения» не может быть загружен и / или найден в текущем загрузчике классов контекста потока.Обычно это результаты:

  • Отсутствует библиотека в вашем пути к классам во время выполнения.
  • Статический {} блок Ошибка выполнения инициализатора кода (предотвращение загрузки класса уязвимойclass).
  • Упаковка файлов JAR / дерево загрузчиков классов проблемы, такие как смешивание файлов JAR, развернутых в загрузчике дочерних и родительских классов.

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

1 голос
/ 08 апреля 2011

просто запустите программу с "java yourClass".

Не используйте .class в конце.

Попробуйте и дайте нам знать.

0 голосов
/ 26 декабря 2013

Выдается, если экземпляр JVM или ClassLoader пытается загрузить определение класса (вызов метода или создание нового экземпляра), и определение класса не найдено.

Причина NoClassDefFoundError означает, что определенный класс недоступен во время выполнения, но был доступен во время компиляции.

1. Класс принадлежит отсутствующему файлу JAR или JAVA , или JAR не былдобавлен в classpath.

2. Класс недоступен в Java. Classpath.

3. NoClassDefFoundError в Java из-за исключения в блоке статического инициализатора ,когда ваш класс выполняет некоторую статическую инициализацию в статическом блоке, и если статический блок генерирует исключение, класс, который ссылается на этот класс, получит NoclassDefFoundError в Java.

4.Your Classpath, PATH или JAVA_HOME настроен неправильно или установка JDK неверна. переустанавливая JDK .

5. 5. maven clean-install и просто перезапустите сервер с необходимым источником(.java) файлы.

0 голосов
/ 31 августа 2013

Issue-java.lang.NoClassDefFoundError

Основная причина : неверный путь Java задан в разделе переменных среды

Решение : установить правильный путь JAVA_HOME

Шаги-> Настройка переменной среды (Мой щелчок правой кнопкой мыши -> Свойства-> Переменная Env-> Вкладка «Дополнительно» -> Переменная)

  1. Создать новую переменную среды JAVA_HOME.

    JAVA_HOME    **.;C:\Program Files (x86)\Java\jdk1.6.0_14**
    
  2. Установить переменную JAVA_HOME в разделе переменных PATH.

    PATH  %JAVA_HOME%\bin
    
  3. Установить переменную JAVA_HOME в переменной CLASSPATH

    CLASSPATH  %JAVA_HOME%\jre\lib
    
  4. Перезагрузка системы

  5. Проверка всех переменных

    echo %CLASSPATH%
    
    echo %JAVA_HOME%
    
    echo %PATH%
    
  6. Компиляция Java-класса javac Test.java

  7. Запустить Java-программу Java Test

0 голосов
/ 24 апреля 2013

Я столкнулся с той же проблемой, что и вы.

Я решил проблему следующим образом:

  1. Проверка пути к классам в переменных среды
  2. Я открыл проект в навигаторе Eclipse и проверил файлы классов. Мои файлы классов были в разных папках, а не в папке bin . Я просто скопировал отсутствующие файлы в папку bin , после чего проблема была решена.

Простое копирование отсутствующих файлов .class в каталог bin проекта eclipse решило проблему.

0 голосов
/ 08 апреля 2011

Если файл класса GoodDog не находится в текущем рабочем каталоге, вам нужно установить classpath в вашей команде java ....

java GoodDogTestDrive -cp ./path/to/gooddog/
...