为什么我不能运行我的java Hello World程序,如果它在一个包中?
我创建了一个名为“Hello.java”的文件,如下所示:
public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); } }
我运行了javac Hello.java
,然后是java Hello
,一切都按预期工作。
然后我添加了线package testpackage;
到文件的顶部,并将其放在目录/home/matthew/Desktop/hellotest/testpackage
。 我把.:/home/matthew/Desktop/hellotest
放在我的CLASSPATH中,并以与以前相同的方式编译和运行。 但是现在,我收到了这个错误:
matthew@matthew-laptop:~/Desktop/hellotest/testpackage$ java Hello Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: testpackage/Hello) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:634) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:277) at java.net.URLClassLoader.access$000(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:212) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334) Could not find the main class: Hello. Program will exit.
为什么它自己工作,而不是在包中?
现在它在testpackage
,它的名字实际上是testpackage.Hello
。 所以上一个目录并在那上做java
。
上一个目录,然后运行:
java testpackage.Hello
试试java testpackage.Hello
。
因为这是在您的类路径中,您应该能够从任何工作目录运行它,但是以其全名引用它。