2

次のjasminコードからアセンブルされた.classファイルがローカルディレクトリにあります。

.class public default_class
.super java/lang/Object
.method public static main([Ljava/lang/String;)V
.limit locals 10
.limit stack 10
invokestatic main_65428301()I
return
.end method
.method public static main_65428301()I
.limit locals 10
.limit stack 10
ldc "foobar"
astore_0
iconst_0
ireturn
.end method

java -jar jasmin.jar test.jを実行すると、すべてがコンパイルされ、.classファイルが取得されますが、次のエラーが発生するため、javadefault_classで開始できません。

Exception in thread "main" java.lang.NoClassDefFoundError: 
    at default_class.main(test.j)
Caused by: java.lang.ClassNotFoundException: 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more

私のJAVA_HOMEは次のとおりです。

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

クラスパスには、現在のディレクトリ(この.classファイルが配置されている場所)のみが含まれます。何か追加する必要がありますか?

編集:クラスを起動するために使用するコマンドはjava default_class

EDIT2:OK、ついに私は何が悪かったのか理解しました!クラスの名前は大文字で始める必要があります!これで私の問題は解決しました!とにかく、私を助けようとした皆さんに感謝します!

4

2 に答える 2

2

あなたは一般的に望むでしょう:

java -cp . NameOfClassWithMainMethod

現在のディレクトリにある単一のクラスファイルを実行します。ただし、スタック トレースを注意深く読むと、Java がメイン クラスとメイン メソッドを見つけたものの、それ以外のものを見つけることができないことがわかります。あなたが投稿したコードから、私は何を見ることができません。

ランニング

java -verbose:class ......

as debugger を使用してクラスローダーの動作と再生を観察する場合と同様に、状況を明らかにする可能性があります。strace を使用して開こうとしているファイルを確認する場合と同様に。

于 2013-01-06T12:38:07.820 に答える
0

あなたのエラーメッセージは言う:

java.lang.ClassNotFoundException:

ただし、このメッセージの形式は通常次のようになります。

java.lang.ClassNotFoundException: SomeNonExistingClass

見つからないクラスの名前が見つからないのはなぜですか? 例には、空のクラス名 ("") を参照する命令があるためです。そのため、クラス名を指定するのを忘れた命令を探す必要があります。そして、それはここにあります:

invokestatic main_65428301()I

代わりに、次のように読む必要があります。

invokestatic default_class/main_65428301()I

これで問題が解決します。

次のように書いている疑いがあります。

EDIT2:OK、ついに何が間違っていたのかがわかりました!クラスの名前は大文字で始めなければなりません! これは私の問題を解決しました!とにかく、私を助けようとした皆さんに感謝します!

これが原因である可能性があるという兆候はなく、実際にそうではないからです.

于 2014-06-10T21:36:18.323 に答える