找不到主类HelloWorld

时间:2010-06-09 11:41:54

标签: java

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

我设置的环境变量是:

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

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

  • JAVA_HOME C:\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)

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

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

10 个答案:

答案 0 :(得分:35)

告诉它在哪里找你上课:它在“。”中,这是当前目录:

java -classpath . HelloWorld

在这种情况下无需设置JAVA_HOMECLASSPATH

答案 1 :(得分:24)

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

java -cp [compiler outpur dir] HelloWorld

顺便说一下,你不需要像你那样设置CLASSPATH。

答案 2 :(得分:11)

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

java HelloWorld 

这应该可以正常工作。

答案 3 :(得分:6)

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

您不需要CLASSPATH中的rt.jar,这些仅适用于旧版本的Java。您可以将其保留为未定义并使用当前工作目录,或者只需将.(单个点)(由';'分隔)添加到CLASSPATH变量以指示当前目录:

CLASSPATH: .;C:\...\some.jar

或者,您可以使用-cp-classpath选项:

java -cp . HelloWorld

而且,正如安德烈亚斯写的那样,Java不需要JAVA_HOME,只是对于像ant这样的第三方工具(但应该指向正确的位置)。

答案 4 :(得分:4)

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

答案 5 :(得分:2)

放了。在begin..it中的classpath值将开始工作...它发生的原因是它在路径变量中提到的类路径中搜索类文件。

答案 6 :(得分:1)

如果从命令行启动java和javac,则不需要

JAVA_HOME。但是JAVA_HOME应该指向真正的jdk目录,C:\Program Files\Java\jdk1.7.0

我永远不会在构建脚本之外使用CLASSPATH环境变量,尤其不是全局定义的。 -cp标志更好。但在您的情况下,由于您不需要其他库(rt.jar不计算),您将不需要类路径声明。丢失的-cp相当于-cp .,这就是您需要的内容)

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

答案 7 :(得分:1)

我遇到了同样的问题。也许,问题是你已经用不同的Java版本编译和执行了这个类。

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

javac -version

java -version

在Linux中,使用

sudo update-alternatives --config java

更改Java的版本。

答案 8 :(得分:1)

我也面临同样的问题......

实际上,由于您的程序.class文件未保存在该目录中,因此引发了此问题。从环境变量中删除CLASSPATH(不需要为简单的Java程序设置类路径)并重新打开cmd提示符,然后编译并执行。

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

答案 9 :(得分:0)

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

检查" CLASSPATH"的价值。变量并确保最后保持;。

注意: ; 用于结束分隔符 用于在最后包含现有路径