我有两个java类如下
App1
不带包装:
class App1 {
public static void main(String[] args) {
System.out.println("App1 hello world...");
}
}
App2
在一个包中:
package java.java.package1;
class App2 {
public static void main(String[] args) {
System.out.println("App2 hello world...");
}
}
我可以编译它们:
D:\javaTest>javac App1.java
D:\javaTest>javac App2.java
但是,我只能运行第一个:
D:\javaTest>java App1
App1 hello world...
D:\javaTest>java java.java.package1.App2
Exception in thread "main" java.lang.NoClassDefFoundError: java/java/package1/App2
Caused by: java.lang.ClassNotFoundException: java.java.package1.App2
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: java.java.package1.App2. Program will exit.
我怎样才能跑App2
?
如果你把source在与包名称匹配的适当目录层次结构中(D:\javaTest\java\java\package1\App1.java
),并从层次结构的根开始编译/运行(D:\javaTest
),你就不会遇到这个问题:
D:\javaTest>javac java\java\package1\App1.java
D:\javaTest>java java.java.package1.App1
App2 hello world...
您还可以使用以下命令进行编译-d
选项,以便将类移动到这样的目录层次结构中:
javac -d . App2.java
java java.java.package1.App2
请注意,您不应使用以下开头的包名称java
,更高版本的 JDK 将抛出 SecurityException。看这个问题了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)