Как разрешить ClassNotFoundException?



Я пытаюсь запустить приложение Java, но получаю эту ошибку:



java.lang.ClassNotFoundException:



после двоеточия приходит расположение класса, который отсутствует. Однако, я знаю, что это место не существует, так как класс находится в другом месте. Как я могу обновить этот класс? Это имеет какое-то отношение к пути к классу?

2880   17  

17 ответов:

ваш путь к классам нарушен (что является очень распространенная проблема в мире Java).

в зависимости от того, как вы запускаете приложение, вам нужно изменить аргумент на -cp, ваша запись пути к классу в манифесте.MF или ваш макет диска.

путь к классу-это список мест для загрузки классов.

эти "места" могут быть либо каталогами, либо файлами jar.

для каталогов JVM будет следовать ожидаемому шаблону для загрузки класса. Если у меня есть каталог C:/myproject/classes в моем classpath, и я пытаюсь загрузить класс com.название_компании.Фу, он будет искать в каталоге классов для каталога под названием com, тогда под этим каталогом называется название_компании и, наконец, он будет искать файл с названием Фу.класс в этом каталоге.

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

таким образом, JVM пересекает путь к классу от начала до конца, ища определение класса при попытке загрузить определение класса. Например, в пути к классу:

C:/myproject/classes;C:/myproject/lib/stuff.баночка;C:/myproject/lib/otherstuff.банку

JVM попытается заглянуть в каталог классы, затем в вещи.банку и, наконец, в otherstuff.банку.

когда вы получаете ClassNotFoundException, это означает, что JVM пересек весь путь к классу и не найден класс, на который вы пытались ссылаться. Решение, как это часто бывает в мире Java, чтобы проверить ваш classpath.

вы определяете путь к классу в командной строке, говоря java-cp а затем ваш classpath. В среде IDE, такой как Eclipse, у вас будет опция меню для указания пути к классам.

это лучшим решением я нашел до сих пор.

Предположим, у нас есть пакет под названием org.mypackage содержащие классов:

  • HelloWorld (основной класс)
  • SupportClass
  • UtilClass

и файлы, определяющие этот пакет, хранятся физически в каталоге D:\myprogram (в Windows) или /home/user/myprogram (на Linux).

структура файла будет выглядеть этот: enter image description here

когда мы вызываем Java, мы указываем имя приложения для запуска: org.mypackage.HelloWorld. Однако мы также должны сказать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому для запуска программы мы должны использовать следующую команду: enter image description here

Примечание: вы должны выполнить выше java команда независимо от того, что ваше текущее местоположение. Но это не тот случай javac. Для компиляция вы даже можете напрямую перейти в каталог, где у вас есть ваш .java файлы и непосредственно выполнить javac ClassName.java.

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

на Windows

java -classpath .;yourjar.jar YourMainClass

на UNIX / Linux

java -classpath .:yourjar.jar YourMainClass

попробуйте это, если вы используете maven. Я использую maven для моего проекта и когда я делаю mvn clean install и попробуйте запустить программу, которая выдает исключение. Итак, я очищаю проект и запускаю его снова, и он работает для меня.

Я использую Eclipse IDE.

для класса не найдено исключение при запуске Junit test, попробуйте запустить mvn clean test раз. Он будет компилировать все тестовые классы.

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

java -cp "c:/location/of/file" YourProgram

или если вы используете IDE, такие как eclipse вы можете щелкнуть правой кнопкой мыши на project -> build path -> configure build path и добавьте внешнюю банку, содержащую ваш класс, в путь сборки, тогда он должен работать нормально.

использовать ';' в качестве разделителя. Если переменные среды установлены правильно, вы должны увидеть свои настройки. Если ваш путь и путь к классам верны, windows должна распознать эти команды. Вам не нужно перезагружать компьютер при установке Java.

добавить полный путь из файла jar в путь к классам. В linux используется:export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH". Другим способом работы (без редактирования пути к классу) было распаковывание jar в текущей папке проекта.

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

1) с помощью -cp опция с полным путем к файлу jar.

2) с помощью -cpтолько с именем jar, когда он находится в текущей папке

3) копирование jar в текущую папку проекта

4) Копирование jar в стандартное расположение Java jars (/usr/share/java)

это решение сообщается для класса com.mysql.интерфейс jdbc.Драйвер в mysql-connector-java.5-*.jar, работает на linux с OpenJDK версии 1.7

поднимитесь наверх и удалите оператор import, если он есть, и повторно импортируйте класс. Но если это не так, сделайте чистую, а затем постройте. Вы используете Netbeans или Eclipse?

Я столкнулся с этим, а также и все другие решения. У меня его не было .файл класса в моей папке HTML, у меня только был .Java-файл. Как только я добавил.файл класса программа работала нормально.

  1. Это может произойти, если ваш classpath не является правильным

  2. давайте положим сериализуемый класс и десериализуемый класс под одним и тем же именем проекта. Вы запускаете сериализуемый класс, создавая сериализуемый объект в определенной папке. Теперь вам нужны дезариализованные данные. В то же время, если вы измените имя проекта не получится. Сначала необходимо запустить сериализуемый класс, а затем десериализовать файл.

Если вы используете maven попробуйте Maven обновить все проекты и принудительно для снимков. Он также очистит и перестроит весь путь к классам.. Это решило мою проблему..

Я только что сделал

1.Аннулировать кэш и перезапустить

2.восстановил мой проект который решил проблему

Я пытался бежать .jar из кода C# с помощью Process класса. Код java успешно выполнялся из eclipse, но не из C# visual studio и даже при нажатии непосредственно на файл jar он всегда останавливался с ClassNotFoundException: исключения. Решение для моего, было экспортировать программу java как " Runnable JAR file "вместо"JAR File". Надеюсь, что это может помочь кому-то.

Это может произойти в Windows после обновления java, где отсутствует старая версия Java SDK и присутствует новая. Я бы проверил, использует ли ваша IDE установленную версию Java SDK (IntelliJ: CTRL + SHIFT + ALT + S)

Если вы добавили несколько (сторонние)**библиотеки и расширяет * * приложение класс

тогда это может произойти.

для этого, вы должны установить multiDexEnabled true и заменить продлен Application класс MultiDexApplication.

это будет решено.

поместите весь код в блок try, а затем поймайте исключение в блоке catch

try
{
    // code
}
catch(ClassNotFoundException e1)
{
    e1.getmessage();
}

Comments

    Ничего не найдено.