如何在包中运行Java类? [英] How do I run a Java class in a package?
问题描述
我有两个如下的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.有关更多信息,请参见此问题./p>
I have two java classes as follows
App1
without a package:
class App1 {
public static void main(String[] args) {
System.out.println("App1 hello world...");
}
}
App2
in a package:
package java.java.package1;
class App2 {
public static void main(String[] args) {
System.out.println("App2 hello world...");
}
}
I can compile them both:
D:\javaTest>javac App1.java
D:\javaTest>javac App2.java
However, I can only run the first one:
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.
How can I run App2
?
If you put the source in an appropriate directory hierarchy matching the package name (D:\javaTest\java\java\package1\App1.java
), and compile/run from the root of the hierarchy (D:\javaTest
), you wouldn't have this problem:
D:\javaTest>javac java\java\package1\App1.java
D:\javaTest>java java.java.package1.App1
App2 hello world...
You can also compile using the -d
option so that the classes are moved into such a directory hierarchy:
javac -d . App2.java
java java.java.package1.App2
Note you shouldn't use a package name starting with java
, and later versions of the JDK will throw a SecurityException. See this question for more information.
这篇关于如何在包中运行Java类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!