我在文件夹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个小时但没有任何工作..请帮助
答案 0 :(得分:4)
您需要完全限定的名称,例如
java -cp . Utilities.List
即。您告诉JVM从当前直接(-cp .
)查找类Utilities.List
,它将在文件Utilities\List.class
中预期。
为了更加一致,你应该将.java文件放在Utilities
目录下(是的 - 这是同义词 - 包指定了这个,但这是一贯的做法)。
我也会避免打电话给你的班级List
。在某个阶段你要导入一个java.util.List
,这一切都会让人感到非常困惑!
最后,只要您获得多个课程,请调查ant或其他构建工具,并将source
和target
目录分开。
答案 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。