- ベストアンサー
実行時のNoClassDefFoundErrorが解決できません
Windows で コマンドプロンプトから Java のプログラム実行時に NoClassDefFoundError が発生する問題で Web 等を参考にいろいろ対処してみたのですが、 どうしても解決しないでいます。 JDK, JRE は 1.6.0_01 を以下にインストールしており、 C:\Program Files\Java\jdk1.6.0_01 C:\Program Files\Java\jre1.6.0_01 C:\Program Files\Java\jdk1.6.0_01\bin にPATHを通しています。 CLASSPATH 環境変数は設定していません。 その上で、以下のことをやりました。 (1) HelloWorld.java というファイルを D:\test フォルダに作成する。 内容は以下の通り。 HelloWorld.java ------------------------------------------------------------------------------- package testpackage; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } ------------------------------------------------------------------------------- (2) コマンドプロンプトで D:\test に移動し、以下を実行する。 javac HelloWorld.java (正常終了し、HelloWorld.class が D:\test に作成されたことを確認) (3) 引き続きコマンドプロンプトで、以下を実行する。(例外が発生) java HelloWorld ------------------------------------------------------------------------------- Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam e: testpackage/HelloWorld) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ------------------------------------------------------------------------------- Web の情報を参考に java -cp . HelloWorld java -cp D:\test HelloWorld も実行してみましたが、同様の結果でした。 (4) 試しに以下も実行してみました。 javap HelloWorld ------------------------------------------------------------------------------- Compiled from "HelloWorld.java" public class testpackage.HelloWorld extends java.lang.Object{ public testpackage.HelloWorld(); public static void main(java.lang.String[]); } ------------------------------------------------------------------------------- 以上です。 これ以上の対処方法が全く思い当たらない状態なのですが、 原因のわかる方がいらっしゃいましたらお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Javaのクラスファイルは、packageの階層と同じディレクトリ構造にしないといけません。 質問者さんの例なら、D:\testの下にtestpackageというディレクトリを作り、 その中にコンパイルしたHelloWorld.classを入れます。 そして、D:\test からコマンドプロンプトで java testpackage.HelloWorld もしくは java testpackage/HelloWorld で起動できます。
その他の回答 (1)
- pcbeginner
- ベストアンサー率46% (261/560)
D:\testpackage に保存するか、 package test; にするか。 っていうか wrong name: testpackage/HelloWorld ってjavaが教えてくれてますよ。
お礼
回答ありがとうございます。 しかしながら、D:\testpackage に保存しても package test; にしてみても同じ結果でした。 ↓こんな具合で D:\test>java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam e: test/HelloWorld) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) 一体どこが wrong name って言われてるんでしょう・・・
お礼
D:\test\testpackage にコピーして、 D:\test から java testpackage.HelloWorld を実行することで 正常に実行できました。 本当にありがとうございました。 > Javaのクラスファイルは、packageの階層と同じディレクトリ構造にしないといけません。 おっしゃるとおりで、完全に勘違いしていました。 こんなことで半日も悩んでました…お恥ずかしい。