我有这个简单的应用程序:
package default1;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World333!");
}
}
编译并运行:
$ default1$ javac HelloWorld.java
$ default1$ java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: default1/HelloWorld)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
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:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
这也不起作用:
$ default1$ java default1.HelloWorld
Error: Could not find or load main class default1.HelloWorld
如何解决?我试图做不同的事情,找不到解决方法。
答案 0 :(得分:3)
javac和java命令关心目录结构;包层次结构和目录结构需要相互对应。在您的情况下,将目录更改为包含default1目录的目录并运行:
javac default1/HelloWorld.java
java default1.HelloWorld
答案 1 :(得分:1)
尝试使包名与主类的名称相同。
在这种情况下,您可以将package default1;
更改为package helloworld;