Подтвердить что ты не робот

Как устранить ClassNotFoundException?

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

java.lang.ClassNotFoundException:

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

C:/MyProject/классы; C:/myproject/lib/stuff.jar; С:/myproject/lib/otherstuff.jar

Сначала JVM попытается найти в каталоге классы, затем в stuff.jar и, наконец, в otherstuff.jar.. p >

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

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

Ответ 3

Это лучшее решение, которое я нашел до сих пор.

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

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

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

Структура файла будет выглядеть так: введите описание изображения здесь

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

ПРИМЕЧАНИЕ.. Вы должны выполнить приведенную выше команду java независимо от вашего текущего местоположения. Но это не относится к javac. Для вы можете даже напрямую зайти в каталог, в котором у вас есть ваши файлы .java и непосредственно выполните javac ClassName.java.

Ответ 4

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

в Windows

java -classpath .;yourjar.jar YourMainClass

в UNIX/Linux

java -classpath .:yourjar.jar YourMainClass

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

Для:

Класс не найден Исключение при запуске теста Junit

Попробуйте запустить mvn clean test после того, как он скомпилирует все тестовые классы (сработает для меня).

Ответ 8

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

На меня не работали:

1) Использование опции -cp с полным пути файла jar.

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

3) Копирование флага в текущую папку проекта

4) Копирование банки в стандартное расположение java-банок (/usr/share/java)

Это решение сообщается для класса com.mysql.jdbc.Driver в mysql-connector-java.5 - *. jar, работающем на Linux с OpenJDK версии 1.7

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

Ответ 12

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

Ответ 13

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

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