こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

実行時の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[]);
}
-------------------------------------------------------------------------------


以上です。
これ以上の対処方法が全く思い当たらない状態なのですが、
原因のわかる方がいらっしゃいましたらお願いします。

投稿日時 - 2007-06-22 11:12:45

QNo.3105812

困ってます

質問者が選んだベストアンサー

Javaのクラスファイルは、packageの階層と同じディレクトリ構造にしないといけません。

質問者さんの例なら、D:\testの下にtestpackageというディレクトリを作り、
その中にコンパイルしたHelloWorld.classを入れます。
そして、D:\test からコマンドプロンプトで

java testpackage.HelloWorld
もしくは
java testpackage/HelloWorld

で起動できます。

投稿日時 - 2007-06-22 13:16:27

お礼

D:\test\testpackage にコピーして、
D:\test から java testpackage.HelloWorld を実行することで
正常に実行できました。
本当にありがとうございました。

> Javaのクラスファイルは、packageの階層と同じディレクトリ構造にしないといけません。
おっしゃるとおりで、完全に勘違いしていました。
こんなことで半日も悩んでました…お恥ずかしい。

投稿日時 - 2007-06-22 13:34:22

ANo.2

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

D:\testpackage
に保存するか、
package test;
にするか。
っていうか
wrong name: testpackage/HelloWorld
ってjavaが教えてくれてますよ。

投稿日時 - 2007-06-22 11:24:15

お礼

回答ありがとうございます。

しかしながら、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 って言われてるんでしょう・・・

投稿日時 - 2007-06-22 11:48:51

あなたにオススメの質問