Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

クラスパスについて

Javaの設定については初心者です。環境変数やクラスパスについて教えて頂ければと思っております。

クラスファイル名:Bit.class
Javaファイル名:Bit.java


コンパイルの通ったjavaファイルを起動しようとしても
Exception in thread "main" java.lang.NoClassDefFoundError: Bit (wrong name: Labs
/Example/Bit/Bit)
        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)
Could not find the main class: Bit.  Program will exit.


とエラーが出てしまい、調べると「実行しても、クラスファイルが何処にあるかが分からずエラーが出ている=環境変数でクラスパスを設定していない」ということまでは分かったのですが、set CLASSPATH=%CLASSPATH%;.と設定しても動きません。

実行しようとしているJAVAのファイルと同じ場所と同じ場所を直接コントロールパネルで環境変数で設定するべきなのか、それともset CLASSPATHでそのファイルの場所をコピーして指定するべきなのか、そもそもこの考え方が間違っているのか……。


クラスパスを特に設定しなくても作動していたファイルもあるので(main関数内でSystem.out.println(1);のようなものを何行か記述した程度のものですが)、その違いや作動しなくなる分かれ目もよく分かりません。
クラスパスとは本来どのように定義すべきものなのか教えて頂ければと思います。

2

回答

79236

閲覧

2件の回答

評価

0

パッケージは指定してますか?
仮にabcパッケージのBitクラスで、
カレントディレクトリがExampleだとします。

Exampleディレクトリの中にabcディレクトリがあって、
その中にBit.classがありますか?

クラスパスで指定している場所から、パッケージをディ
レクトリ名に読み替えてクラスファイルを探しに行きま
す。
また、パッケージの区切り(ピリオド)がディレクトリ
区切りになりますので、
abc.de.Fgクラスであれば
./abc/de/Fg.classとなります。

逆を言うと、クラスパスに指定するのは、パッケージの
ルートです。

評価

0

>さとみさん

解決しました。

仰る通り、パッケージを指定していなかった部分に不備がありました(パッケージを指定していないファイル達であれば正常に作動していたということもあとで分かりました)。


パッケージも指定しなければならないということまでは知らなかったので、勉強になりました。
本当に有難う御座います。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。