关于java:找不到主类HelloWorld

Could not find main class HelloWorld

我在下面的文件夹EDCOX1,0中安装了Java1.7.0。我的操作系统是带Service Pack 3的Windows XP(2002版)。

我设置的环境变量是:

  • 类路径:C:\Program Files\Java\jdk1.7.0\jre\lib
    t.jar;

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

  • 爪哇之家:C:\Program Files\Java;

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

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

1
2
3
4
5
6
7
8
9
import java.io.*;

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

当我使用javac HelloWorld.java编译时,它编译得很好。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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)

在四处搜索之后,我发现环境变量可能有问题。我试着玩,但没有运气。

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


告诉它在哪里查找类:它在"."中,这是当前目录:

1
java -classpath . HelloWorld

在这种情况下,不需要设置JAVA_HOMECLASSPATH


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

1
java -cp [compiler outpur dir] HelloWorld

顺便说一下,您不需要按照您所做的方式设置类路径。


只需从环境变量中删除"classpath"。然后尝试运行:

1
java HelloWorld

这应该很管用。


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

您不需要在EDCOX1 2中使用RT.jar,这些只适用于旧版本的Java。您可以不定义当前工作目录,也可以只在CLASSPATH变量中添加以';'分隔的.(单点),以指示当前目录:

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

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

1
java -cp . HelloWorld

而且,正如安德烈亚斯所写的,EDCOX1的1Ω不是Java所需要的,只是对于一些第三方工具,如Ant(但是应该指向正确的位置)。


您可以将"."添加到类路径以指定当前目录,也可以按照unbeli建议的方式在运行时手动添加该目录。


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


我也面临同样的问题……

实际上,这个问题是由于您的程序.class文件没有保存在该目录中而引起的。从环境变量中删除你的类路径(不需要为简单的Java程序设置类路径),重新打开CMD提示符,然后编译和执行。

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


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

确保编译器的版本与命令"Java"相同:

1
2
3
javac -version

java -version

在Linux,使用

SUDO更新替代方案——配置Java

更改Java版本。


如果从命令行启动Java和Javac,则不需要EDCOX1 1Ω。但是JAVA_HOME应该指向真正的jdk目录,在您的例子中是C:\Program Files\Java\jdk1.7.0

我从不在构建脚本之外使用CLASSPATH环境变量,尤其是不全局定义的环境变量。-cp旗比较好。但是在您的例子中,由于您不需要额外的库(rt.jar不算在内),所以您不需要类路径声明。缺失的-cp相当于-cp .,这就是你在这里需要的)

HelloWorld类需要声明为public类。这实际上可能是导致您出现问题的原因。(我非常确定,源文件需要一个公共类…还是最多只有一个公共课?)


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

检查您的"classpath"变量的值,并确保在保存的末尾;。

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