Ошибка Java NoClassDefFoundError при существовании файла .class

#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. Это мое подозрение, и распространенная причина этого заключается в неправильном использовании имени пакета.