.class 文件存在时出现 Java NoClassDefFoundError

发布于 2024-11-06 05:25:20 字数 1258 浏览 2 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

寻梦旅人 2024-11-13 05:25:20

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

package org.example;

public class Search {
     ...
}

您必须将其运行为

java org.example.Search

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

If your class is in package, then you must pass the full name of the class.

package org.example;

public class Search {
     ...
}

You will have to run it as

java org.example.Search

The current directory must contain org subdirectory, which in its turn contains example directory where Search.class is located. You can use -cp parameter to specify where your class files are located.

染火枫林 2024-11-13 05:25:20

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

The classical reason for NoClassDefFoundError is an exception arising out of the class's static initializer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文