2011-05-08 26 views
1

我正在使用NetBeans中的Java项目,并且在按下运行项目按钮时它运行完美。但是,我需要从终端运行程序。我打开了其中包含的类文件,search.class目录,并试图当.class文件存在时,Java NoClassDefFoundError

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

感谢您的所有反馈!

+3

这个课程在一个包里吗?班级的名字是什么?你能显示班级的签名吗?这就是开始的那一行......'public class MyClass {'这个类是什么包? – 2011-05-08 04:31:10

回答

2

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

+2

虽然现在我想到了,但是当类文件中的类名称与类文件的名称(包括包)不匹配时,它也会出现。 – 2011-05-08 04:35:41

+1

这是我的怀疑,一个常见的原因是没有正确使用软件包名称。 – 2011-05-08 04:36:18

3

如果您的课程在包装中,那么您必须传递课程的全名。

package org.example; 

public class Search { 
    ... 
} 

你将不得不运行它

java org.example.Search 

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

相关问题