0

我知道有很多关于 NoClassDefFoundError 的帖子,他们似乎都在谈论 jar 文件。虽然我对 eclipse 中的 java 感到很舒服,但我很困惑为什么我能想出的最简单的事情不起作用,除非他们在大学方面破坏了一些东西。

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

这是抛出这个的整个 hello.java 程序:

Exception in thread "main" java.lang.NoClassDefFoundError: hello/java
Caused by: java.lang.ClassNotFoundException: hello.java
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: hello.java.  Program will exit.

$CLASSPATH=./:/usr/java/latest/lib:/home/41/myusername/bin

java -verbose hello.class

给出:

[打开/usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.Object]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.io.Serializable]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.Comparable]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.CharSequence]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.String]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.reflect.GenericDeclaration]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.reflect.Type]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.reflect.AnnotatedElement]
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 java.lang.Class]
...
[从 /usr/java/jdk1.6.0_10/jre/lib/rt.jar 加载 sun.misc.AtomicLong]
...

再次例外。

java版本

给出:

java版本“1.6.0_10-rc2”
Java(TM) SE 运行时环境 (build 1.6.0_10-rc2-b32)
Java HotSpot(TM) 服务器虚拟机(内部版本 11.0-b15,混合模式)
4

4 回答 4

9

首先,使用 编译.java文件以生成文件。然后,使用命令执行类- 使用命令时不包括扩展名。javac hello.javahello.classjava hello.classjava

另外,我想指出,类名以大写字母开头是惯例 -hello应该是Hello.

于 2009-09-28T13:25:07.720 回答
3

我认为你真的先编译了这个类吗?:

javac hello.java
java hello
于 2009-09-28T13:31:49.017 回答
2
java -verbose hello.class

... 意思是“嘿,Java,在类 'hello.class' 中运行 main() 方法。

Java 找不到名为“hello.class”的类。你的课叫做“你好”。

java -verbose hello

自从 '。' 在您的类路径中,Java 将在“./hello.class”中找到“hello”类。

额外提示:在 Java 中,以大写字母开始类是惯例。

public class Hello {

这有助于区分其余代码中的类引用和变量引用。

Dessert dessert= new Dessert("tiramisu")
于 2009-09-28T13:26:03.317 回答
1
java -verbose hello
于 2009-09-28T13:25:07.580 回答