大学bash中的Java因NoClassDefFoundError而失败

时间:2009-09-28 13:21:47

标签: java bash noclassdeffounderror java-6

我知道有很多关于NoClassDefFoundError的帖子,他们似乎都在讨论jar文件。虽然我对日食中的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 /爪哇/最新/ lib中:/家庭/ 41 /名为myUsername / bin中

java -verbose hello.class

给出:

[Opened /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.Object from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.io.Serializable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.Comparable from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.CharSequence from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.String from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.reflect.GenericDeclaration from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.reflect.Type from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.reflect.AnnotatedElement from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
[Loaded java.lang.Class from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
...
[Loaded sun.misc.AtomicLong from /usr/java/jdk1.6.0_10/jre/lib/rt.jar]
...

再次例外。

java -version

给出:

java version "1.6.0_10-rc2"
Java(TM) SE Runtime Environment (build 1.6.0_10-rc2-b32)
Java HotSpot(TM) Server VM (build 11.0-b15, mixed mode)

4 个答案:

答案 0 :(得分:9)

首先,使用javac .java编译您的hello.java文件,以生成hello.class文件。然后,使用java hello命令执行该类 - 使用.class命令时不包含java扩展名。

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

答案 1 :(得分:3)

我认为你先实际编译了这门课程吗?:

javac hello.java
java hello

答案 2 :(得分: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")

答案 3 :(得分:1)

java -verbose hello