Я пытаюсь запустить Java-приложение, но получаю эту ошибку:
java.lang.ClassNotFoundException:
После двоеточия указывается местоположение отсутствующего класса. Однако я знаю, что это местоположение не существует, поскольку класс расположен в другом месте. Как я могу обновить путь к этому классу? Это как-то связано с путем к классу?
Переведено автоматически
Ответ 1
Путь к классу - это список местоположений для загрузки классов.
Эти "местоположения" могут быть либо каталогами, либо файлами jar.
Для каталогов JVM будет следовать ожидаемому шаблону загрузки класса. Если у меня есть каталог C:/myproject/classes в моем пути к классу, и я пытаюсь загрузить класс com.mycompany.Foo, он будет искать в каталоге classes каталог с именем com, затем в нем каталог с именем mycompany и, наконец, он будет искать файл с именем Foo.class в этом каталоге.
Во втором случае для файлов jar будет выполняться поиск в файле jar этого класса. Файл jar на самом деле представляет собой просто сжатую коллекцию каталогов, подобных приведенной выше. Если вы распакуете файл jar, вы получите кучу каталогов и файлов классов, следуя приведенному выше шаблону.
Таким образом, JVM проходит путь к классу от начала до конца в поисках определения класса, когда пытается загрузить определение класса. Например, в classpath :
JVM попытается сначала заглянуть в каталог classes, затем в stuff.jar и, наконец, в otherstuff.jar.
Когда вы получаете ClassNotFoundException , это означает, что JVM прошла весь путь к классу и не нашла класс, на который вы пытались сослаться. Решение, как это часто бывает в мире Java, заключается в проверке вашего пути к классу.
Вы определяете путь к классу в командной строке, произнося java -cp, а затем свой путь к классу. В IDE, такой как Eclipse, у вас будет опция меню для указания вашего пути к классу.
Ответ 2
Ваш путь к классу нарушен (что является очень распространенной проблемой в мире Java).
В зависимости от того, как вы запускаете свое приложение, вам нужно изменить аргумент на -cp, запись пути к классу в MANIFEST.MF или макет вашего диска.
Предположим, у нас есть пакет с именем org.mypackage, содержащий классы:
HelloWorld (основной класс)
SupportClass
UtilClass
и файлы, определяющие этот пакет, физически хранятся в каталоге D:\myprogram (в Windows) или /home/user/myprogram (в Linux).
Структура файла будет выглядеть следующим образом:
Когда мы вызываем Java, мы указываем имя приложения для запуска: org.mypackage.HelloWorld. Однако мы также должны указать Java, где искать файлы и каталоги, определяющие наш пакет. Итак, чтобы запустить программу, мы должны использовать следующую команду:
ПРИМЕЧАНИЕ: Вы должны выполнить приведенную выше java команду независимо от вашего текущего местоположения. Но это не относится к javac. Для компиляции вы даже можете напрямую зайти в каталог, где у вас есть ваши .java файлы, и напрямую выполнить javac ClassName.java.
Ответ 4
Если вы знаете путь к классу или банку, содержащую класс, добавьте его в свой classpath во время его запуска. Вы можете использовать classpath, как указано здесь: