#java #netbeans #noclassdeffounderror
#java #netbeans #ошибка noclassdeffounderror
Вопрос:
Я работаю над Java-проектом в NetBeans, и он отлично запускается, когда я нажимаю кнопку запустить проект. Однако мне нужно запустить программу с терминала. Я открыл каталог, содержащий файл класса, search.class и попытался запустить его с
java search
Однако я получаю сообщение об ошибке:
Exception in thread "main" java.lang.NoClassDefFoundError: search (wrong name: search/search)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Я ни за что на свете не могу понять, почему там написано «неправильное имя», поскольку search.class существует в этом каталоге. Моя единственная мысль заключается в том, что существуют файлы .jar, которые я вызываю из своей программы (они находятся в том же каталоге), и, возможно, мне нужно включить их во время выполнения?
Будем признательны за любую помощь!
РЕДАКТИРОВАТЬ: Таким образом, оказывается, что, вероятно, проблема заключалась в том, что файлы .jar не были включены. Я исправил это, перейдя в dist / папку, где весь проект упакован как jar, и запустив его как java -jar search.jar
Спасибо за все отзывы!
Комментарии:
1. Есть ли этот класс в пакете? Как называется класс? Можете ли вы показать подпись класса? Это строка, которая начинается…
public class MyClass {
В каком пакете находится класс?
Ответ №1:
Если ваш класс находится в пакете, то вы должны передать полное имя класса.
package org.example;
public class Search {
...
}
Вам нужно будет запустить его как
java org.example.Search
Текущий каталог должен содержать org
подкаталог, который, в свою очередь, содержит example
каталог, в котором Search.class
находится. Вы можете использовать -cp
параметр, чтобы указать, где находятся файлы вашего класса.
Ответ №2:
Классической причиной NoClassDefFoundError является исключение, возникающее из-за статического инициализатора класса.
Комментарии:
1. Хотя, теперь, когда я думаю об этом, это также может возникнуть, когда имя класса внутри файла класса не совпадает с именем файла класса, включая package .
2. Это мое подозрение, и распространенная причина этого заключается в неправильном использовании имени пакета.