为什么我不能运行我的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

因为这是在您的类路径中,您应该能够从任何工作目录运行它,但是以其全名引用它。