Java 运行类时出现NoClassDefFoundError
我试图运行一个类,但出现以下错误:Java 运行类时出现NoClassDefFoundError,java,eclipse,class,Java,Eclipse,Class,我试图运行一个类,但出现以下错误: java.lang.NoClassDefFoundError: MyClass Caused by: java.lang.ClassNotFoundException: MyClass at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClas
java.lang.NoClassDefFoundError: MyClass
Caused by: java.lang.ClassNotFoundException: MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"
虽然main
方法在MyClass
中,我直接运行这个类,但这种情况还是发生了。
虽然我从中启动了程序,但为什么找不到这个类
下面是一些代码:
public class MyClass extends A implements B{
public MyClass() throws Exception {
//make some initializations
}
public static void main(final String[] args) throws Exception {
MyClass myClass = new MyClass();
//do stuff with myClass
}
}
PS:我正在使用EclipseIndigo 编辑 我已经在命令行中运行了两次该类:
D:\Eclipse JEE\Workspace2\Example\target\classes\com\example\main>java com.example.main.MyClass
Exception in thread "main" java.lang.NoClassDefFoundError: com/example/main/MyClass
Caused by: java.lang.ClassNotFoundException: com.example.main.MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: com.example.main.MyClass. Program will exit.
D:\Eclipse JEE\Workspace2\Example\target\classes\com\example\main>java GeoDAOImpl
Exception in thread "main" java.lang.NoClassDefFoundError: MyClass(wrong name: com/example/main/MyClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
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:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: MyClass. Program will exit.
你并没有给我们提供足够的信息来确定,但我的猜测是:
- 您没有提供正确的完全限定类名
- 您的类不在类路径上
package foo;
public class MyClass {
public static void main(String[] args) {
}
}
那么您应该正在运行:
java foo.MyClass
编辑:由于提供了额外的信息,我怀疑我知道发生了什么。我怀疑该类不是在包中创建的,而是创建了一个运行配置,它只运行MyClass
。它现在被移动到com.example.main
,但没有更新运行配置
进入运行配置编辑器(单击“运行”按钮旁边的下拉菜单,选择运行配置…)并找到“MyClass”,然后检查要运行的类,并对其进行编辑以输入正确的包名。您还没有给我们提供足够的信息来确定,但我猜:
- 您没有提供正确的完全限定类名
- 您的类不在类路径上
package foo;
public class MyClass {
public static void main(String[] args) {
}
}
那么您应该正在运行:
java foo.MyClass
编辑:由于提供了额外的信息,我怀疑我知道发生了什么。我怀疑该类不是在包中创建的,而是创建了一个运行配置,它只运行MyClass
。它现在被移动到com.example.main
,但没有更新运行配置
进入运行配置编辑器(单击“运行”按钮旁边的下拉菜单,选择运行配置…)并找到“MyClass”,然后检查要运行的类,并对其进行编辑以输入正确的包名。如果尚未编译源文件,则首先需要编译源文件。假设您的类
MyClass
不在包中,并且您位于包含源文件MyClass.java
的目录中,请使用以下代码编译它:
javac MyClass.java
现在应该有一个名为MyClass.class
的文件
然后,要运行它,您需要确保包含MyClass.class
文件的目录位于类路径中。如果未设置CLASSPATH
环境变量,Java默认情况下将在当前目录中查找,因此您应该能够使用以下工具运行它:
java MyClass
如果这不起作用,可以使用-cp
选项显式地将当前目录
放在类路径中:
java -cp . MyClass
如果尚未编译源文件,则首先需要编译源文件。假设您的类
MyClass
不在包中,并且您位于包含源文件MyClass.java
的目录中,请使用以下代码编译它:
javac MyClass.java
现在应该有一个名为MyClass.class
的文件
然后,要运行它,您需要确保包含MyClass.class
文件的目录位于类路径中。如果未设置CLASSPATH
环境变量,Java默认情况下将在当前目录中查找,因此您应该能够使用以下工具运行它:
java MyClass
如果这不起作用,可以使用-cp
选项显式地将当前目录
放在类路径中:
java -cp . MyClass
类和它的默认构造函数是否为public?@s.L.Barth是的,它是public请说明您是如何尝试运行代码的,以及一个简短但完整的代码示例。请查看如何解决问题@Dragos:您仍然没有显示如何运行它。“我直接运行这个类”不是很准确。这里A和B是什么?你的类真的不在包中吗?类和它的默认构造函数是否是public?@s.L.Barth是的,它是public请说明你是如何运行代码的,还有一个简短但完整的代码示例。请看一下如何解决这个问题@Dragos:您还没有展示如何运行它。“我直接运行这个类”不是很准确。这里A和B是什么?您的类真的不在包中吗?我使用的是
EclipseIndigo
作为IDE,所以我不应该自己编译它。我对这个问题做了更新。@Dragos:我没有问你是如何编译的,我问你是如何运行的。好的。该类位于项目Example
的包com.Example.main
中。我打开项目,打开包,在里面,我右键单击类MyClass
。出现一个菜单。我从菜单中选择runas->Java应用程序
。这就是我总是在Eclipse中运行应用程序的方式,所以我不知道问题出在哪里A
是同一com.example.main
包中的一个公共抽象类,B
是com.example.interface
中的一个公共接口@Dragos:好的,所以如果它在com.example.main
包中,它不应该试图运行MyClass
,它应该尝试运行com.example.main.MyClass
。正在编辑…不,运行配置很好。确实出现了com.example.main.MyClass
。你还有其他想法吗?我正在使用eclipseindigo
作为IDE,所以我不应该自己编译它。我对这个问题做了更新。@Dragos:我没有问你是如何编译的,我问你是如何运行的。好的。该类位于项目Example
的包com.Example.main
中。我打开项目,打开包,然后进去