从命令行运行java

时间:2012-10-18 22:16:06

标签: java

到目前为止,我一直主要使用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)

6 个答案:

答案 0 :(得分:6)

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

请参阅How the Java Launcher Finds User Classes了解其工作原理。

答案 1 :(得分:0)

您可以使用此命令:

java main.Main

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

答案 2 :(得分: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

答案 3 :(得分:0)

编译

视窗:
javac main\Main.java
苹果:
javac main/Main.java

运行

java main.Main

答案 4 :(得分:0)

如果添加package Main,则必须将源文件放在Main / Main.java文件夹中。之后你可以编译。运行程序时,使用“cd”转到Main文件夹,然后写java -cp Main.Main 请参阅我的问题noclassdeffounderror

答案 5 :(得分:0)

试试这个......

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

  

javac - d。 Main.java

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

然后你只需运行程序 java main.Main     要么 java main / Main