【问题标题】:running java from command line从命令行运行java
【发布时间】:2012-10-18 22:16:05
【问题描述】:

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

【问题讨论】:

  • 您的 Java 源文件位置必须 (a) 与其打包匹配,并且 (b) 在设置 java 命令的类路径时必须考虑在内。
  • 下面看我的回答,你需要在根目录下。您是在“主”目录中运行它吗?

标签: java


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以使用这个命令:

    java main.Main
    

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

    【讨论】:

      【解决方案3】:

      您的类路径可能设置不正确。 因为你给你的 .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

      【讨论】:

        【解决方案4】:

        编译

        Windows:
        javac main\Main.java
        麦克:
        javac main/Main.java

        运行

        java main.Main

        【讨论】:

          【解决方案5】:

          如果添加package Main,则必须将源文件放在文件夹 Main/Main.java 中。之后就可以编译了。运行程序时,使用“cd”进入主文件夹,然后写入java -cp Main.Main 请参阅与您的问题类似的问题noclassdeffounderror

          【讨论】:

            【解决方案6】:

            试试这个...

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

            javac -d。主.java

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

            然后您只需将程序运行为 java main.Main 或者 java主/主

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-07-06
              • 2013-04-30
              • 2011-01-28
              • 2013-10-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-20
              相关资源
              最近更新 更多