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 ランタイム環境 (ビルド 1.6.0_10-rc2-b32)
Java HotSpot(TM) Server VM (ビルド 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 に答える