【问题标题】:Could not find main class HelloWorld找不到主类 HelloWorld
【发布时间】:2010-06-09 11:41:54
【问题描述】:

我在以下文件夹 C:\Program Files\Java 中安装了 Java 1.7.0。我的操作系统是带有 Service Pack 3 的 Windows XP(2002 版)。

我设置的环境变量是:

  • CLASSPATHC:\Program Files\Java\jdk1.7.0\jre\lib\rt.jar;

  • 路径: C:\Program Files\Java\jdk1.7.0\bin;

  • JAVA_HOMEC:\Program Files\Java;

我在这里展示了我系统中的类名。

接下来我写了一个程序,HelloWorld.java:

import java.io.*;

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

当我使用javac HelloWorld.java 编译时,它编译正常。

但在我发出java HelloWorld 之后,我遇到了以下错误:

Error: Could not find main class HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:198)

Caused by: java.lang.ClassNotFoundException: HelloWorld
        at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:422)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:355)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)

经过一番搜索,我发现环境变量可能有问题。我试着玩这个,但没有运气。

我什至重新启动了机器,然后我再次尝试运行,但命运相同。

【问题讨论】:

  • 提醒一下:jdk 7 还没有正式稳定。因此,如果有一些有趣的事情,请始终记住,您可能需要使用 jdk 6 重新编译。
  • 不要使用未发布的 Java 7 版本,而是在此处下载并使用 JDK 6:java.sun.com/javase/downloads/index.jsp
  • ...但这不是 jdk 7 的问题。
  • AFAIK jdk 7 是官方的,你是不是和 8 混淆了?
  • 删除 CLASSPATH 环境变量。然后尝试

标签: java


【解决方案1】:

只需从环境变量中删除“类路径”即可。然后尝试运行:

java HelloWorld 

这应该可以正常工作。

【讨论】:

    【解决方案2】:

    告诉它在哪里寻找你的班级:它在“.”中,即当前目录:

    java -classpath . HelloWorld
    

    这种情况下不需要设置JAVA_HOMECLASSPATH

    【讨论】:

    • 哇,好神奇!我乱七八糟没有结果,但这立即奏效了!非常感谢!
    • @unbeli 我遇到了同样的问题,令人惊讶的是这解决了它。我只是好奇。我正在看 Lynda.com Java 教程,我和他做的完全一样,他的作品(他只输入 java HelloWorld),我的不是(我有这个问题)。为什么会这样?他做了什么,所以不必键入“。”谢谢。
    【解决方案3】:

    您没有设置包含已编译类的类路径! java 找不到任何课程,如果你不告诉它在哪里看。

    java -cp [compiler outpur dir] HelloWorld
    

    顺便说一句,您不需要像以前那样设置 CLASSPATH。

    【讨论】:

      【解决方案4】:

      Java 没有找到您编译的类文件 (HelloWorld.class) 的位置。它使用CLASSPATH 环境变量中的目录和JAR 文件来搜索在运行java.exe 时是否没有给出-cp-classpath 选项。

      您不需要CLASSPATH 中的 rt.jar,只有旧版本的 Java 才需要这些文件。您可以不定义它并使用当前工作目录,或者只是在CLASSPATH 变量中添加.(单点),用';'分隔以指示当前目录:

      类路径: .;C:\...\some.jar

      您也可以使用-cp-classpath 选项:

      java -cp . HelloWorld
      

      而且,正如 Andreas 所写,Java 不需要 JAVA_HOME,仅用于 ant 等一些第三方工具(但应指向正确的位置)。

      【讨论】:

        【解决方案5】:

        您要么想添加“。”到您的 CLASSPATH 以指定当前目录,或者按照 unbeli 建议的方式在运行时手动添加。

        【讨论】:

          【解决方案6】:

          放.;在开始的类路径值处..它将开始工作...发生这种情况是因为它在路径变量中提到的类路径中搜索类文件。

          【讨论】:

            【解决方案7】:

            如果从命令行启动 java 和 javac,则不需要JAVA_HOME。但是JAVA_HOME 应该指向真正的jdk 目录,在你的情况下是C:\Program Files\Java\jdk1.7.0

            我永远不会在构建脚本之外使用CLASSPATH 环境变量,尤其是没有全局定义的环境变量。 -cp 标志更好。但在您的情况下,由于您不需要额外的库(rt.jardoesn't count),您不需要类路径声明。缺少的-cp 等同于-cp .,这就是您需要的)

            HelloWorld 类需要声明为public。这实际上可能是您的问题的原因。(我很确定,源文件需要一个公共类......或者它是一个公共类最多?)

            【讨论】:

            • HelloWorld 不公开不会导致此问题。除此之外,这是正确的。
            【解决方案8】:

            我遇到了同样的问题。也许,问题在于您使用不同的 Java 版本编译和执行了该类。

            确保编译器的版本与命令“java”相同

            javac -version
            
            java -version
            

            在 Linux 中,使用

            sudo update-alternatives --config java

            更改 Java 的版本。

            【讨论】:

              【解决方案9】:

              我也遇到了同样的问题……

              其实这个问题是因为你的程序.class文件没有保存在那个目录下。从环境变量中删除 CLASSPATH(对于简单的 Java 程序,您无需设置类路径)并重新打开 cmd 提示符,然后编译并执行。

              如果您仔细观察,您的.class 文件将保存在同一位置。 (我不是专家,我也是基础程序员,如果我的句子有任何错误,请忽略它:-))

              【讨论】:

                【解决方案10】:

                看起来您已正确完成所有设置,但可能有一个区域可能会导致问题

                检查“CLASSPATH”变量的值并确保最后保留;。

                注意: ; 用于结束分隔符 . 用于在末尾包含现有路径

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-01-04
                  • 2021-11-29
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-01-28
                  • 1970-01-01
                  • 2014-04-27
                  相关资源
                  最近更新 更多