如何在包中运行Java类? [英] How do I run a Java class in a package?

查看:94
本文介绍了如何在包中运行Java类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个如下的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆