.class 文件存在时出现 Java 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 运行
感谢所有反馈!
I am working on a java project in NetBeans and it runs perfectly when I press the run project button. However, I need to run the program from the terminal. I opened up the directory which contains the class file, search.class, and tried running it with
java search
However I get an error:
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)
I cannot for the life of me figure out why it says "wrong name" since search.class exists in that directory. My only thought is that there are .jar files which I call from my program (they are in that same directory) and perhaps I need to be including them at runtime?
Any help would be greatly appreciated!
EDIT: So it turns out that it probably was a problem with not including the .jar files. I fixed it by going into the dist/ folder where the entire project is packaged as a jar and running it as java -jar search.jar
Thanks for all the feedback!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您的类位于包中,则必须传递该类的全名。
您必须将其运行为
当前目录必须包含
org
子目录,该子目录又包含Search.class
所在的example
目录。您可以使用 -cp 参数来指定类文件所在的位置。If your class is in package, then you must pass the full name of the class.
You will have to run it as
The current directory must contain
org
subdirectory, which in its turn containsexample
directory whereSearch.class
is located. You can use-cp
parameter to specify where your class files are located.NoClassDefFoundError 的典型原因是类的静态初始值设定项引起的异常。
The classical reason for NoClassDefFoundError is an exception arising out of the class's static initializer.