Как разрешить исключение ClassNotFoundException?

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

java.lang.ClassNotFoundException:

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

17 ответов


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

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


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

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

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

во втором случае для файлов 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

Примечание: вы должны выполнить выше независимо от вашего текущего местоположения. Но дело не в этом. 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, попробуйте запустить mvn clean test раз. Он будет компилировать все тестовые классы.


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

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

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


использовать ';' в качестве разделителя. Если переменные среды установлены правильно, вы должны увидеть свои настройки. Если ваш путь и путь к классам верны, 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-файл. Однажды я добавил .class file программа работала нормально.


  1. это может произойти, если ваш путь к классам неверен

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


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


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

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();
}