为什么我在Java中得到NoClassDefFoundError异常?

时间:2012-06-14 09:10:18

标签: java exception cmd

我正在尝试从cmd运行Java应用程序,我遇到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Main
    Caused by: java.lang.ClassNotFoundException: Main
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    Could not find the main class: Main.  Program will exit.

在目录中你可以找到:

Directory of C:\Java

AVLNode.java
AVLTree.java
Comparator.java
HashTable.java
input1.dat
input2.dat
Main.java
StringComparator.java

我正在跑步:

java Main input1.dat input2.dat  output1.dat

我在文件夹中有Main.Java,我有:

Main.Java上的

public static void main(String[] args)方法(以及一些其他函数)

我已经阅读了answers about this problem here,但我认为我做的一切都很好:(那么问题是什么?

5 个答案:

答案 0 :(得分:1)

检查当前目录中是否有Main.class个文件。如果已经存在,请检查系统环境变量中的path变量。它应该指向JAVA_HOME\bin

答案 1 :(得分:1)

如另一个答案中所述,检查当前目录中是否存在Main.class

也尝试java -cp . Main arg1 arg2

以上行将classpath设置为当前目录

答案 2 :(得分:1)

首先确保您已编译代码。

您应该在包含Main.class的目录中(如果您使用的是eclipse IDE,它将是bin /)

如果您的Main类在一个包中,您应该从包含该包的目录运行您的命令,您的命令将是java [包名] .Main [arguments]

如果要从任何地方运行命令,可以使用-cp选项,如下所示:

java -cp [classpath] [package name].Main [arguments]

with classpath:包含.class的目录的路径,直到包

之前

答案 3 :(得分:0)

除了其他人建议的内容之外,请检查package中是否有Main个语句。如果是这样,您必须在启动程序时包含它。

例如,如果你有:

package mypackage;

public class Main
{
    public static void main (String[] affhf)
    {

    }
}

然后你必须通过以下方式启动你的程序:

java mypackage.Main input1.dat input2.dat output1.dat

在某些情况下,编译过程可能会失误......

答案 4 :(得分:0)

看起来您还没有编译代码。请尝试以下方法:

cd Java
javac Main.java

这应该在Java目录中创建.class文件。然后,在不更改目录的情况下,尝试:

java Main input1.dat input2.dat output1.dat