【问题标题】:Java in bash at university fails with NoClassDefFoundError大学 bash 中的 Java 因 NoClassDefFoundError 而失败
【发布时间】:2009-09-28 13:21:47
【问题描述】:

我知道有很多关于 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,混合模式)

【问题讨论】:

  • @Joachim 你是怎么做这个漂亮的滚动框的?有没有办法可以查看用于编辑帖子的标记?我也想学怎么做。

标签: java bash noclassdeffounderror java-6


【解决方案1】:

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

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

【讨论】:

  • 是的,我已经习惯了 C# 中类的大写字母,我尝试将其重命名为大写字母,以防出现问题。
  • java hello 不起作用,直到它被编译显然我错过了编译步骤并且不知道 .java 和 .class 之间的区别
【解决方案2】:

我想你是不是真的先编译了这个类?:

javac hello.java
java hello

【讨论】:

  • 我认为 java 不是编译语言。
  • @Maslow:当然它是一种编译语言。它被编译成字节码。
  • 当然是 - 但如果你想假装不是,你可以看看 groovy。
【解决方案3】:
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")

【讨论】:

  • 沙漠是甜点的子类吗? ;-)
  • @slim - java hello 不起作用,直到它被编译显然我错过了编译步骤并且不知道 .java 和 .class 之间的区别
【解决方案4】:
java -verbose hello

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2019-07-05
    • 2014-01-08
    • 2020-08-19
    • 2022-10-23
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多