为什么错误的名字与NoClassDefFoundError

时间:2013-01-08 17:48:40

标签: java exception

我在文件夹List.java中创建了一个UtilityPack文件,其中包含此代码

package Utilities;
public class List
{
    private class node{}
    public void insert(int data){}
    public void print(){}
    public static void main(String[] s){}
}

编译我做了

C:\UtilityPack>javac List.java

但是当我尝试使用

运行时
C:\UtilityPack>java -classpath . List

OR

C:\UtilityPack>java List

我收到错误

Exception in thread "main" java.lang.NoClassDefFoundError: List (wrong name: Uti
lities/List)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)

我一直在努力执行这个程序从过去3个小时但没有任何工作..请帮助

3 个答案:

答案 0 :(得分:4)

您需要完全限定的名称,例如

java -cp . Utilities.List

即。您告诉JVM从当前直接(-cp .)查找类Utilities.List,它将在文件Utilities\List.class中预期。

为了更加一致,你应该将.java文件放在Utilities目录下(是的 - 这是同义词 - 包指定了这个,但这是一贯的做法)。

我也会避免打电话给你的班级List。在某个阶段你要导入一个java.util.List,这一切都会让人感到非常困惑!

最后,只要您获得多个课程,请调查ant或其他构建工具,并将sourcetarget目录分开。

答案 1 :(得分:0)

使用班级的完整名称启动您的程序:

 java Utilities.List

但文件夹名称也应与包名匹配。

答案 2 :(得分:0)

您的目录结构需要遵循Java包路径。 IOW,如果类List在包Utilities中,则需要将其置于名为Utilities的目录中,该目录应位于项目的根级别,即源文件的路径应该是 C:\ UtilityPack \ Utilities \ List.java 。当您在 C:\ UtilityPack (项目根目录)时,通过将其引用为List来编译并运行Utilities.List

您也可以考虑使用Eclipse,它可以防止发生这类事情或任何其他Java IDE。