• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:同一パッケージにあるクラスが見つからないエラー)

同一パッケージ内のクラスが見つからないエラー

このQ&Aのポイント
  • Tomcatとeclipseを用いたjspによるウェブアプリ開発の勉強中、同一パッケージ内のクラスを使いたいが見つからないエラーが発生しています。
  • 試した解決方法として、異なるディレクトリでコンパイルする、クラスパスを指定するなどを試しましたがエラーは解決しませんでした。
  • また、メソッドをクラス内に定義するなどの対策も試しましたが、クラスが認識されずにエラーが発生しました。

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

  • ベストアンサー
回答No.2

> 1-2.クラスパスを入れてコンパイルしてみる。 >  同一パッケージ内なので、この必要はないはずですが、 >  C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。 javacでコンパイルするなら、 classpath/パッケージ/クラス と探すので、これだと、 C:\(中略)\mangasearch/mangasearch/manga.class を探しにいっちゃいますよ。 classpathに指定するディレクトリを、もう1つ上の階層にしてみてください。 eclipseとjavacとどっちを使いたいのはわからないのですが、 eclipseなら プロジェクト名/src/mangasearch/mangalist.java プロジェクト名/src/mangasearch/tagsrch.java になってますか?

hirooni
質問者

お礼

ありがとうございます!プロジェクトディレクトリを以下に移し、classpathに指定するディレクトリを、もう1つ上の階層にしたら、無事コンパイルできました!

その他の回答 (1)

回答No.1

mangalist.javaにあるmangalistクラスは、mangasearchパッケージに入っていますが、 tagsrchクラスは、package宣言が無いので、デフォルトパッケージですよね? 同じディレクトリにあれば同じパッケージって訳ではありませんので注意。 mangaクラスの宣言で、スコープが定義されていないので、mangaクラスはパッケージプライベートになります。 パッケージプライベートは、同じパッケージからは参照できるスコープです。 ですから、そのままでは、tagsrchクラスとは別のパッケージなので、参照できません。 方法1: mangaクラスのスコープをpublicにする。 ・パブリックなクラス名は、コンパイラの規則により、ファイル名と同じでなければならない(大文字小文字の区別を含めて)ってルールがあるので、更にファイル名をmanga.javaにする必要がある 方法2 tagsrchクラスをmangasearchパッケージに移動する。 あと、クラス名は先頭大文字、あとは区切りを大文字ってのが一般的なルールなので Mangaクラス、TagSrchクラスの方が良いと思う。 Srchじゃわかりづらいので、TagSearchに方がもっと良いと思います。

hirooni
質問者

お礼

色々ご教授頂きありがとうございます。とても勉強になりました! 方法1、方法2、方法1+方法2を行ってみましたが、エラーは変わりませんでした。。 eclipse上のエラーチェックでもエラーはないのですが、、、どうしてなんでしょう(汗。

hirooni
質問者

補足

早速のご回答、本当に感謝です! 今はパソコンがないのでできませんが、すぐ試してみます! 書き忘れていて申し訳ないのですが、tagsrchクラスにはpackage宣言がなされています。

関連するQ&A