Java NoClassDefFoundError 当.class文件存在时



我正在 NetBeans 中处理一个 Java 项目,当我按下运行项目按钮时,它运行良好。但是,我需要从终端运行该程序。我打开了包含类文件的目录,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)

我一生都无法弄清楚为什么它说"错误的名称",因为搜索.class存在于该目录中。我唯一的想法是,我从我的程序中调用了.jar文件(它们在同一个目录中),也许我需要在运行时包含它们?

任何帮助将不胜感激!

编辑:所以事实证明,这可能是不包括.jar文件的问题。我通过进入dist/文件夹来修复它,其中整个项目被打包为jar并将其作为java -jar搜索运行.jar

感谢您的所有反馈!

如果您的类在包中,则必须传递该类的全名。

package org.example;
public class Search {
     ...
}

您必须将其运行为

java org.example.Search

当前目录必须包含org子目录,而子目录又包含Search.class所在的example目录。可以使用-cp参数指定类文件所在的位置。

NoClassDefFoundError 的经典原因是由类的静态初始值设定项引起的异常。

相关内容

  • 没有找到相关文章

最新更新