Tomcatとeclipseを用いてjspによるウェブアプリ開発の勉強をしているものです。
tagsrch.java内のメソッドに、同一パッケージ(フォルダ名:mangasearch)内のmangalist.javaで定義したmangaクラスというクラスを使いたいのですが、以下のように、シンボルが見つけられないというエラーが出てしまいます。
C:\(中略)\mangasearch>javac tagsrch.java
tagsrch.java:11: エラー: シンボルを見つけられません
public static List<manga> searchByKey(String k[]) throws IOException{
^
シンボル: クラス manga
場所: クラス tagsrch
tagsrch.java:14: エラー: シンボルを見つけられません
manga[] list = new manga[cnum];
同一パッケージ内に置かれている以上、tagsrch.javaにおいてmangaクラスが使えるはずだと思います。
ですが、いろいろなサイトを参考にして試してもmangaクラスが見つからないまま、tagsrch.javaがコンパイルできません。
初歩的質問で申し訳ありませんが、よろしくお願いいたします。
-参考-
1.いろいろ試したこと
1-1.カレントディレクトリを保存している場所より1つ上の場所でコンパイルする。
eclipseでtomcatプロジェクトを作成したため、どのクラスファイルにもpackage mangasearch;が含まれていました。なので1-1.を行い「javac パッケージ名/ファイル名」でコンパイルしてみました。
1-2.クラスパスを入れてコンパイルしてみる。
同一パッケージ内なので、この必要はないはずですが、
C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。
下記のURLを参考にこの対策を講じましたが、エラーは変わりませんでした。
1-1.1-2.の参考URL:http://oshiete.goo.ne.jp/qa/2520327.html
1-3.メソッドをmangalist.java(mangaクラス)上で定義してしまう。
分割をあきらめ、tagsrch.java上のメソッドをmangalist.javaのmangaクラス上に定義してみました。
publicつけたままだと、
C:\(中略)\mangasearch>javac mangalist.java
mangalist.java:76: エラー: クラスtagsrchはpublicであり、ファイルtagsrch.javaで宣
言する必要があります
となったため、publicをとりました。するとコンパイルは出来ましたが、おそらく異なるパッケージからは使えないクラスとなったため、jsp上でアクセスできないというエラーが発生しました。
org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.IllegalAccessError: mangasearch/tagsrch
このため、分割してtagsrch.javaを宣言する必要があり、1-3.の対策では最初にあげたmangaクラスを認識する問題に帰着すると思われます。
2.mangalist.java/tagsrch.javaについて
mangalist.javaのコンパイルはできています。
mangalist.javaは、ただ単にmangaクラスとそれに付随するフィールド、コンストラクタを記述しただけのファイルです。
■mangalist.java
package mangasearch;
class manga{
フィールド名
・・・
manga(){
//コンストラクタ
}
}
■tagsrch.java
public class tagsrch extends manga{
メソッド{
}
}
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
になってますか?
ありがとうございます!プロジェクトディレクトリを以下に移し、classpathに指定するディレクトリを、もう1つ上の階層にしたら、無事コンパイルできました!
No.1
- 回答日時:
mangalist.javaにあるmangalistクラスは、mangasearchパッケージに入っていますが、
tagsrchクラスは、package宣言が無いので、デフォルトパッケージですよね?
同じディレクトリにあれば同じパッケージって訳ではありませんので注意。
mangaクラスの宣言で、スコープが定義されていないので、mangaクラスはパッケージプライベートになります。
パッケージプライベートは、同じパッケージからは参照できるスコープです。
ですから、そのままでは、tagsrchクラスとは別のパッケージなので、参照できません。
方法1:
mangaクラスのスコープをpublicにする。
・パブリックなクラス名は、コンパイラの規則により、ファイル名と同じでなければならない(大文字小文字の区別を含めて)ってルールがあるので、更にファイル名をmanga.javaにする必要がある
方法2
tagsrchクラスをmangasearchパッケージに移動する。
あと、クラス名は先頭大文字、あとは区切りを大文字ってのが一般的なルールなので
Mangaクラス、TagSrchクラスの方が良いと思う。
Srchじゃわかりづらいので、TagSearchに方がもっと良いと思います。
この回答への補足
早速のご回答、本当に感謝です!
今はパソコンがないのでできませんが、すぐ試してみます!
書き忘れていて申し訳ないのですが、tagsrchクラスにはpackage宣言がなされています。
色々ご教授頂きありがとうございます。とても勉強になりました!
方法1、方法2、方法1+方法2を行ってみましたが、エラーは変わりませんでした。。
eclipse上のエラーチェックでもエラーはないのですが、、、どうしてなんでしょう(汗。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 15:14
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java jdk17.06のインストーラーが起動しない 1 2023/03/27 21:58
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
シンボルが見つかりませんというエラーが理解できません。
Java
-
同一パッケージ内の継承について
Java
-
自作のクラスファイルがインポート出来ない
Java
-
-
4
「削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください」とコンパイルエラーになってしまいます!
Java
-
5
【javaコンパイル時のエラーに関して】 「クラスファイルの不正」というエラー
Java
-
6
Javaのエラーについてです
Java
-
7
java シンボルが見つかりません エラー
Java
-
8
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
9
importしたパッケージが見つからない!
Java
-
10
JAVAコンパイルができない。
Java
-
11
java クラスContext シンボルを見つけられません になる
Java
-
12
javaが文字コードの影響でコンパイルが通りません。
Java
-
13
Javaで改行などが出来ないのです。
Java
-
14
画面を隠す・消す方法を教えてください。
Java
-
15
javax.servlet は存在しませんと出ます。
Java
-
16
Eclipseのアンインストールの仕方
Java
-
17
「シンボルを見つけられません」というエラーの発生原因
Java
-
18
Eclipseでクラスファイルが生成されない
Java
-
19
javaプログラムについて
IT・エンジニアリング
-
20
Path型をString型へ変換する(Java)
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
下記の問合せを行うクエリを、P...
-
packageとimport の違いって?
-
dllと同じプロジェクトにする方法
-
「天声人語」をインターネット...
-
コンボボックスのマウスホイー...
-
Excelでクラス分け表を作成した...
-
自作のクラスファイルがインポ...
-
IPアドレスのクラスAを取得して...
-
main()を持つクラスが2つ以上...
-
VBソースからクラス仕様書作成
-
サーブレット実行時のエラー
-
どこからも呼ばれていない無意...
-
C#で OpenSSLで3DES
-
VBAもしくはVB6:クラスの中で...
-
フォームの呼び出しについて
-
BSアンテナのサイズ(札幌)に...
-
河合塾のクラス分けについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報