Java 为什么NoClassDefFoundError的名称错误

Java 为什么NoClassDefFoundError的名称错误,java,exception,Java,Exception,我在文件夹UtilityPack中创建了一个List.java文件,其中包含此代码 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.ja

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

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

我犯了一个错误

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个小时里,我一直试图执行此程序,但没有任何效果。请帮助使用类的完整名称来启动您的程序:

 java Utilities.List

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

使用类的完整名称来启动程序:

 java Utilities.List

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

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

java -cp . Utilities.List
i、 e.您告诉JVM从当前目录(
-cp.
)中查找类
实用程序.List
,它将在文件
实用程序\List.class
中找到该类

为了更加一致,您应该将.java文件放在
Utilities
目录下(是的-这是重复的-包指定了这一点,但它是一致的)

我也不会打电话给你的班级
List
。在某个阶段,您将要导入一个
java.util.List
,它将变得非常混乱


最后,当您获得多个类时,请调查或使用其他构建工具,并分离
目标
目录。

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

java -cp . Utilities.List
i、 e.您告诉JVM从当前目录(
-cp.
)中查找类
实用程序.List
,它将在文件
实用程序\List.class
中找到该类

为了更加一致,您应该将.java文件放在
Utilities
目录下(是的-这是重复的-包指定了这一点,但它是一致的)

我也不会打电话给你的班级
List
。在某个阶段,您将要导入一个
java.util.List
,它将变得非常混乱


最后,一旦您获得了多个类,就可以研究或使用其他构建工具,并分离
源目录
目标目录。

您的目录结构需要遵循Java包路径。注意,如果类
列表
在包
实用程序中,则需要将其放置在名为Utilities的目录中,该目录应位于项目的根级别,即源文件的路径应为C:\UtilityPack\Utilities\List.java。当您在C:\UtilityPack(项目根目录)中时,您可以编译并运行
List
,方法是将它作为
Utilities.List
引用


您可能还考虑使用Eclipse,它将阻止这种事情发生,或者任何其他java IDE。

< p>您的目录结构需要遵循java包的路径。注意,如果类
列表
在包
实用程序中,则需要将其放置在名为Utilities的目录中,该目录应位于项目的根级别,即源文件的路径应为C:\UtilityPack\Utilities\List.java。当您在C:\UtilityPack(项目根目录)中时,您可以编译并运行
List
,方法是将它作为
Utilities.List
引用



您也可以考虑使用Eclipse,它将阻止这种事情发生,或者任何其他java IDE。< /P>我尝试过,但是它给出了这个错误<代码>错误:无法找到或加载主类实用工具。然后将类路径指向父目录。omg..这太令人困惑了..通过创建文件夹

实用程序解决了问题。
…非常感谢…如果我指定任何包,我是否总是需要创建目录..对于包名,如
A1.A2
,我是否需要在A1下始终创建两个目录A2..我也需要吗如果我没有指定任何包,请创建目录是。这是一条基本规则。随着文件数量的增加,您将看到它有助于管理文件。很多java程序都是由上千个类组成的。我试过了,但出现了以下错误
错误:找不到或加载主类实用程序。List
你应该将文件夹命名为目录,然后将类路径指向父目录。omg..这太令人困惑了..通过创建文件夹
实用程序解决了问题。
…非常感谢…如果我指定任何包,我是否总是需要创建目录..对于包名,如
A1.A2
,我是否需要在A1下始终创建两个目录A2..我也需要吗如果我没有指定任何包,请创建目录是。这是一条基本规则。随着文件数量的增加,您将看到它有助于管理文件。许多java程序是由上千个类组成的。如果你用
javac-d编译它。List.java
然后编译器会自动将类文件放在正确的位置(即
C:\UtilityPack\Utilities\List.class
)。@IanRoberts很好的提示…谢谢..这是一条简单的规则--您可以很容易地绕过它--但始终将源/类放在与其包名对应的目录中,并将“根”目录(那些名为目录的包所在的目录)放在类路径中。List.java
然后编译器会自动将类文件放在正确的位置(即
C:\UtilityPack\Utilities\List.class
)。@IanRoberts很好的提示…谢谢..这是一条简单的规则--您可以很容易地绕过它--但始终将源/类放在与其包名对应的目录中,并将“根”目录(找到那些名为目录的包的目录)放在类路径中。omg..这太让人困惑了..通过创建文件夹
实用程序解决了这个问题
…非常感谢…这太让人困惑了。基本上,您需要目录结构来镜像包结构,因此它是一致的