【问题标题】:How to compile packages in java?如何在java中编译包?
【发布时间】:2012-05-11 06:48:41
【问题描述】:

我写了一个简单的打包程序:


  //A simple package

       package MyPack


       class Balance
       {
        String name;
        double bal;

        Balance(String n, double b)
        {
            name=n;
                    bal=b;
            }

        void show()
            {
            if(bal<0)
            System.out.println("-->");
            System.out.println(name+ ": $:" +bal);
        }
        }

        class AccountBalance
        {
            public static void main(String args[])
            {
                       Balance current[]=new Balance[3];
                    current[0]=new Balance("A.K.Juwatkar",123.123);
                    current[1]=new Balance("A.P.Dhoke",345.67);
                    current[2]=new Balance("Anil Sarang",100.98);

                    for(int i=0;i<3;i++)
                current[i].show();
               }
        }

我使用的是 Ubuntu 10.04 & 当我使用它编译时

java MyPack.AccountBalance

我收到以下消息:

Exception in thread "main" java.lang.NoClassDefFoundError: MyPack/AccountBalance
Caused by: java.lang.ClassNotFoundException: MyPack.AccountBalance
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    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)
Could not find the main class: MyPack.AccountBalance. Program will exit.

怎么了?请帮帮我。 我已经安装了openjdk,我还需要安装什么吗? 我正在使用 Ubuntu 10.04,请帮帮我

【问题讨论】:

标签: java


【解决方案1】:

最好是从包外部编译和运行类:

首先你用 javac 编译:

$javac MyPack/AccountBalance.java

这将在 MyPack 文件夹中创建一个名为 AccountBalance.class 的新文件

然后你可以运行它:

$java MyPack.AccountBalance

顺便说一句:不鼓励包名以大写字母开头。

【讨论】:

    【解决方案2】:

    当您尝试编译 java 类时,使用“-d”选项(目标)指定 .class 文件的位置。

    javac -d "classes" AccountBalance.java
    

    当您运行程序时,请确保您的类路径中包含相同的文件夹:

    java -classpath "classes" MyPack.AccountBalance
    

    【讨论】:

      【解决方案3】:

      尝试创建名为MyPack的文件夹并在其中移动.class文件或使用以下命令行编译java代码并将.class文件移动到MyPack文件夹中。

      javac YourFileName.java -d .
      

      并使用,

      java MyPack.AccountBalance
      

      看看javac工具

      来自工具文档:默认情况下,编译器将每个类文件放在与 它的源文件。您可以指定一个单独的目标目录 -d(参见下面的选项)。

      package 教程。

      【讨论】:

      • 我由 javac AccountBalance.java 编译没有错误但是当我尝试使用 java MyPack.AccountBalance 运行时,我得到以下消息:
      • @user1388626 您需要创建 MyPack 文件夹并将 Balance.class 和 AccountBalance.class 移动到其中。或者使用 -d 开关,以便 javac 工具创建包文件夹。
      • 我已将 AccountBalance.java 文件放在 MyPack 文件夹中
      • @user1388626 然后从这个文件夹中出来(回到 MyPack 的父级)并运行 >java MyPack.AccountBalance
      【解决方案4】:

      如果您经常通过javacjava 命令编译和运行,请使用

      javac MyJavaClass.java && java MyJavaClass
      

      这将编译类然后运行你刚刚编译的类。

      注意:如果使用 Windows powershell,请将 &amp;&amp; 替换为 ;

      【讨论】:

      • 使用java 命令,您不需要指定.class 扩展名,而只需指定包含main 方法的类的完全限定类名
      • Windows 也使用这种语法。
      • @Nahiyan Windows cmd 使用这种语法,但 Windows powershell 使用; 来运行一个又一个命令。再次更新了我的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多