当.class文件存在时,Java NoClassDefFoundError

时间:2011-05-08 04:26:24

标签: java netbeans noclassdeffounderror

我正在研究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)

我不能为我的生活弄清楚为什么它说“错误的名字”,因为search.class存在于该目录中。我唯一想到的是我从我的程序调用的.jar文件(它们在同一个目录中),也许我需要在运行时包含它们?

非常感谢任何帮助!

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

感谢所有反馈!

2 个答案:

答案 0 :(得分:3)

如果您的班级在包中,那么您必须传递该班级的全名。

package org.example;

public class Search {
     ...
}

您必须将其作为

运行
java org.example.Search

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

答案 1 :(得分:2)

NoClassDefFoundError的经典原因是类的静态初始化程序引起的异常。