2

到目前为止,我主要使用 eclipse。现在我正在尝试从终端运行 java,但我遇到了包问题。

这是我的Main.java文件:

package main;

class Main {
    public static void main(String[] args) {
        System.out.println("it's working");
    }
}

我使用它编译它javac Main.java然后运行java Main它给了我:

java Main
Exception in thread "main" java.lang.NoClassDefFoundError: Main
Caused by: java.lang.ClassNotFoundException: Main
        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: Main. Program will exit.

当我删除package Main一切正常。我错过了什么?

java -version给出:

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.4) (6b24-1.11.4-1ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
4

6 回答 6

6

您需要在目录级别上运行 java 命令并以完全限定的包名称提供它,例如:java main.Main

请参阅Java 启动器如何查找用户类以了解其工作原理。

于 2012-10-18T22:20:52.390 回答
0

你可以使用这个命令:

java main.Main

确保main(小写)包目录位于类路径中。

于 2012-10-18T22:18:15.953 回答
0

您的类路径可能设置不正确。由于您为 .java 文件提供了一个包,因此不再命名它。

一个例子:

java -cp ./package1/ main.Main //from the current directory and 
                               //if main package is contained in package1

您需要完全限定类名。为了将来参考,如果您想从命令行运行,您必须在包级别停止间接(因为没有更好的术语)。假设你的类在包package1.package2.Main.java 我会像这样运行它java -cp /blah/blah package1.package2.Main

于 2012-10-18T22:19:07.003 回答
0

编译

视窗:
javac main\Main.java
Mac:
javac main/Main.java

java main.Main

于 2012-10-19T02:31:11.467 回答
0

如果添加package Main,则必须将源文件放在文件夹 Main/Main.java 中。之后就可以编译了。当你运行程序时,使用“cd”进入主文件夹,然后写java -cp Main.Main See my question similiar to yours noclassdeffounderror

于 2012-10-19T03:47:14.323 回答
0

试试这个...

在 window 中,您只需将代码编译为

javac -d。主.java

然后在您的程序所在的同一路径中创建一个具有您在类中指定的名称的包(文件夹)(在您的代码中,创建名称为“main”的包)...

然后你只需将程序作为 java main.Main 或 java main/Main 运行

于 2012-10-19T10:54:00.140 回答