26

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


  //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,请帮帮我

4

4 回答 4

39

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

首先你用 javac 编译:

$javac MyPack/AccountBalance.java

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

然后你可以运行它:

$java MyPack.AccountBalance

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

于 2012-05-11T07:09:20.063 回答
17

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

javac -d "classes" AccountBalance.java

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

java -classpath "classes" MyPack.AccountBalance
于 2012-05-11T07:10:52.933 回答
6

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

javac YourFileName.java -d .

并运行使用,

java MyPack.AccountBalance

看看 javac工具

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

教程。

于 2012-05-11T06:52:50.040 回答
3

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

javac MyJavaClass.java && java MyJavaClass

这将编译该类,然后运行您刚刚编译的类。

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

于 2016-10-02T02:31:55.083 回答