【问题标题】:"Could not find or load main class" Error while running java program using cmd prompt [duplicate]“找不到或加载主类”使用cmd提示符运行java程序时出错[重复]
【发布时间】:2014-06-25 03:51:30
【问题描述】:

我正在运行一个简单的“HelloWorld”程序。我在命令提示符中收到此错误:

无法找到或加载主类HelloWorld

我已经在系统中设置了CLASSPATHPATH 变量。在cmd 提示符下,我从保存HelloWorld 程序的目录运行。我可以看到类名和文件名相同,并且在同一目录中创建了 .class 文件。还有什么问题?

我的示例程序如下所示:

package org.tij.exercises;
public class HelloWorld {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("Hello World!!");
  }
}

【问题讨论】:

  • 程序运行得怎么样?
  • 请提供您正在使用的操作系统和您用来尝试运行程序的命令行。
  • 文件 HelloWorld.class 必须在目录 org/tij/exercises 中。然后您可以使用 java -cp 运行该示例。 org.tij.exercises.HelloWorld
  • 我使用 jdk 1.8 在 windows 7 上运行..
  • 命令提示符如下所示... C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>javac HelloWorld.java C:\Users\xyz\Documents\ Java\javastudy\src\org\tij\exercises>java HelloWorld 错误:无法找到或加载主类 HelloWorld

标签: java cmd classpath environment-variables


【解决方案1】:

当 Main 类在包中时,您需要按如下方式运行它:

java <packageName>.<MainClassName>

在您的情况下,您应该按如下方式运行程序:

java org.tij.exercises.HelloWorld 

【讨论】:

  • 我尝试使用 java org.tij.exercises.HelloWorld,但仍然遇到同样的错误。不走运!!
  • 对我有用的是从 target/classes 目录以java org.tij.exercises.HelloWorld 运行程序。起初我尝试直接从target/classes/org/tij/exercises 运行它,但没有成功。
【解决方案2】:

你的CLASSPATH 值是多少?

它可能看起来像这样:

 .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 

我猜你的值不包含这个.;

所以,添加它
完成后,重新启动 CMD

这可能行得通。


例如文件HelloWorld.java在路径:D:\myjavatest\org\yz\test,它的package是:org.yz.test

现在,您位于 CMD 行上的路径 D:\myjavatest\ 中。
输入这个来编译它:

javac org/yz/test/HelloWorld.java

然后,输入这个来运行它:

java org.yz.test.HelloWorld

你可能会得到你想要的。

【讨论】:

  • 我的 CLASSPATH 如下所示:C:\Program Files\Java\jdk1.8.0_05\bin;C:\Program Files\Java\jdk1.8.0_05\jre\bin;.;跨度>
  • 在您的 CLASSPATH 中添加 dt.jartools.jar
  • 并且路径 `bin' 应该在 PATH 中,而不是在 CLASSPATH 中。
【解决方案3】:

我从CLASSPATH 中删除了bin。我发现我正在从HelloWorld.java所在的目录执行java命令,即:

C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises&gt;java HelloWorld

于是我搬回主目录并执行:

java org.tij.exercises.HelloWorld

它起作用了,即:

C:\Users\xyz\Documents\Java\javastudy\src&gt;java org.tij.exercises.HelloWorld

世界你好!!

【讨论】:

    【解决方案4】:

    由于您是从命令提示符运行它,因此您需要确保您的classpath 是正确的。如果你已经设置了,你需要重启你的终端来重新加载你的系统变量。

    如果-classpath-cp没有被使用并且CLASSPATH没有被设置,则使用当前目录(.),但是当运行.class文件时,你需要在包含的文件夹中Java package name 文件夹。

    所以在./target/classes/com/foo/app/App.class 中拥有.class 文件,您有以下可能性:

    java -cp target/classes com.foo.app.App
    CLASSPATH=target/classes java com.foo.app.App
    cd target/classes && java com.foo.app.App
    

    您可以通过打印CLASSPATH 变量来检查您的类路径:

    • Linux:echo $CLASSPATH
    • 窗口:echo %CLASSPATH%

    其中的条目由:分隔。

    另见:How do I run Java .class files?

    【讨论】:

      【解决方案5】:

      我有同样的问题,虽然我没有包名,但我的问题有点不同。我的问题是类路径,例如:

      C:\Java Example>java -cp . HelloWorld 
      

      Java 的-cp 选项以及从我的经验中可以看出的(不多)但是我在尝试不同的方法时遇到了大约 20 次错误,直到我声明类 Path 我收到了同样的错误。 Vishrant 的说法是正确的。代表当前目录。

      如果您需要有关 java 选项的更多信息,请输入 java -?java -help 我认为这些选项不是可选的。

      我刚刚做了一些研究,发现了一个详细介绍CLASSPATH 的网站。 CLASSPATH 必须设置为环境变量;到当前目录 <.>。您可以在 windows 的命令行中设置它:

      // Set CLASSPATH to the current directory '.'
      prompt> set CLASSPATH=.
      

      当您添加新的环境设置时,您需要在启用该变量之前重新启动。但是您可以从命令提示符进行设置。它也可以像我开始提到的那样设置。如需更多信息,如果您使用不同的操作系统,请查看:Environment Variables

      【讨论】:

        【解决方案6】:

        这个错误的一个原因可能是

        找不到或无法加载主类&lt;class name&gt;

        也许你使用你的类名作为不同的名字并用另一个名字保存类名你可以用另一个名字而不是类名来保存一个java源文件名。例如:

        class A{
            public static void main(String args[]) {
                System.out.println("Hello world");
            }
        }
        

        你可以保存为Hello.java 但是,

        编译:javac Hello.java

        这将在同一位置自动生成 A.class 文件。

        现在运行     :java A

        【讨论】:

          【解决方案7】:

          使用java -d . HelloWorld 命令执行您的Java 程序。

          这个命令在你声明了包后才起作用。

          .代表当前目录/。

          【讨论】:

          • 如果我使用“javac -d . HelloWorld”命令执行,我会看到以下错误。 C:\Users\xyz\Documents\Java\javastudy\src\org\tij\exercises>javac -d。 HelloWorld 错误:类名“HelloWorld”仅在明确请求注释处理时才被接受 1 个错误
          • 是的,这是错误的。 javac 表示 java 编译,编译器接受 *.java 文件,即应该有 HelloWorld.java。类编译后,调用java命令,执行生成的(二进制)文件。
          【解决方案8】:

          我在win10上运行java时遇到了类似的问题

          而不是

          $ java ./hello
          Error: Could not find or load main class ..hello
          

          运行

          $ java hello
          Hello, World
          

          【讨论】:

            【解决方案9】:

            在运行 JAVA 类时忘记删除 .class 扩展名,我遇到了完全相同的错误。所以不要这样:

            java myClass.class
            

            应该这样做:

            java myClass
            

            【讨论】:

              【解决方案10】:

              我使用 IntelliJ 创建了我的 .jar,其中包括一些从我的库中解压的 jar。其中一个 jar 在 MANIFEST 中有一些签名的东西,这阻止了 .jar 被加载。没有警告或任何东西,只是没有用。 Could not find or load main class

              删除包含清单的解压罐修复它。

              【讨论】:

                【解决方案11】:

                我遇到了同样的问题,并尝试了这里提到的所有方法。 问题是我没有在创建类之后在 eclipse 中刷新我的项目。 一旦我刷新它,一切都会按预期工作。

                【讨论】:

                  【解决方案12】:

                  面临同样的问题。按照以下步骤解决

                  • 转到包含“org.tij.exercises”包的目录(例如:在 Eclipse 中,它可能是您的 src 文件夹)
                  • 使用java org.tij.exercises.HelloWorld

                  【讨论】:

                    【解决方案13】:

                    对我们很多人来说,至少对我来说,我认为类路径层次结构并不直观,因为我在目录结构中工作,感觉应该是这样。

                    Java 会根据类的包路径来查看类的名称,而不仅仅是文件路径。

                    如果: 我在本地目录 ./packagefoo/MainClass 中,或者 ./packagefoo/ 上的目录,或 一个下来./packagefoo/MainClass/foo.

                    命令“java packagefoo.MainClass”在根 %CLASSPATH% 之外运行,这对 Java 来说意义重大。然后从那里遍历包名,而不是像我们外行编码员所期望的路径名。

                    因此,如果我的 CLASSPATH 设置为 %CWD%/,那么“java packagefoo.MainClass”将起作用。 如果我将 CLASSPATH 设置为 %CWD%/packagefoo/ 那么 packagefoo.MainClass 就找不到了。 总是“java MainClass”没有任何意义,如果它是“package”的成员,直到我撕掉java代码“package packagefoo;”并将类文件向上移动一个目录。

                    事实上,如果我改变“package packagefoo;” “打包 foopackage;”我必须在 CLASSPATH/foopackage 下创建一个子文件夹,否则 foopackage.MainClass 将再次停止工作。

                    更糟糕的是,在 PATH、CLASSPATH、JAVAHOME、Windows、JDeveloper、Oracle 数据库以及安装它的每个用户名之间,我认为试图快速完成某些事情的编码人员最终会暴力强制路径变量和结构直到某些东西在不理解其含义的情况下起作用。

                    至少我做到了。

                    【讨论】:

                      【解决方案14】:

                      创建一个文件夹 org/tij/exercises,然后移动 HelloWorld.java 文件。然后运行下面的命令

                      javac -cp . org/tij/exercises/HelloWorld.java
                      

                      java -cp . org/tij/exercises/HelloWorld
                      

                      【讨论】:

                        【解决方案15】:

                        我遇到了类似的问题,但这是由于我保存 java 类的文件目录中的空格字符。

                        下面给出的场景以及解决方案:

                           public class Sample{
                              public static void main(String[] args) {
                                System.out.println("Hello world, Java");
                              }
                        }
                        
                        • 我的 Sample.java 类保存在目录“D:\Java Programs\Sample.java”[注意:Java 类中不存在 Package 语句]。
                        • 在命令提示符下,将目录更改为“D:\Java Programs\”,我的程序已编译但无法运行,并出现错误“找不到或加载主类”
                        • 在 SOF 上的所有可能解决方案(没有任何工作)之后,我意识到可能是 b 空间导致了我这个问题。
                        • 令人惊讶的是,删除文件夹名称空间 char['Java Programs' -> 'JavaPrograms'],我的程序成功执行。

                          希望对你有帮助

                        【讨论】:

                          猜你喜欢
                          • 2014-09-10
                          • 2013-06-27
                          • 1970-01-01
                          • 2016-12-17
                          • 1970-01-01
                          • 2021-10-03
                          • 1970-01-01
                          • 2014-10-19
                          • 2018-11-02
                          相关资源
                          最近更新 更多