Как разрешить ClassNotFoundException?
Я пытаюсь запустить приложение Java, но получаю эту ошибку:
java.lang.ClassNotFoundException:
после двоеточия приходит расположение класса, который отсутствует. Однако, я знаю, что это место не существует, так как класс находится в другом месте. Как я могу обновить этот класс? Это имеет какое-то отношение к пути к классу?
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).структура файла будет выглядеть этот:
когда мы вызываем Java, мы указываем имя приложения для запуска:
org.mypackage.HelloWorld. Однако мы также должны сказать Java, где искать файлы и каталоги, определяющие наш пакет. Поэтому для запуска программы мы должны использовать следующую команду:Примечание: вы должны выполнить выше
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-файл. Как только я добавил.файл класса программа работала нормально.
Это может произойти, если ваш classpath не является правильным
давайте положим сериализуемый класс и десериализуемый класс под одним и тем же именем проекта. Вы запускаете сериализуемый класс, создавая сериализуемый объект в определенной папке. Теперь вам нужны дезариализованные данные. В то же время, если вы измените имя проекта не получится. Сначала необходимо запустить сериализуемый класс, а затем десериализовать файл.
Если вы используете 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