Как разрешить исключение 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).
структура файла будет выглядеть этот:
когда мы вызываем Java, мы указываем имя приложения для запуска: org.mypackage.HelloWorld
. Однако мы также должны сообщить 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, попробуйте запустить 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 программа работала нормально.
это может произойти, если ваш путь к классам неверен
давайте постулировать сериализуемый класс и класс 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();
}