「Java+MySQL+Tomcatで作る掲示板とブログ」p95でBbsArticleList.javaをコンパイルする必要があると思うのですが、これをjavacでコンパイルしようとすると、下記のようなエラーメッセージが出てコンパイルできません。
もし、原因に検討がつきましたら、回答よろしくお願いします。
C:\jamyto2\classes\bbs\G>javac -d /jamyto2/jsp/WEB-INF/classes BbsArticleList.ja
va
BbsArticleList.java:11: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
private BbsArticle article = new BbsArticle();
^
BbsArticleList.java:41: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
public BbsArticle getArticle(){
^
BbsArticleList.java:11: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
private BbsArticle article = new BbsArticle();
^
エラー 3 個
もし、原因に検討がつきましたら、回答よろしくお願いします。
C:\jamyto2\classes\bbs\G>javac -d /jamyto2/jsp/WEB-INF/classes BbsArticleList.ja
va
BbsArticleList.java:11: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
private BbsArticle article = new BbsArticle();
^
BbsArticleList.java:41: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
public BbsArticle getArticle(){
^
BbsArticleList.java:11: シンボルを解決できません。
シンボル: クラス BbsArticle
場所 : jamyto2.BbsArticleList の クラス
private BbsArticle article = new BbsArticle();
^
エラー 3 個
投稿:rapuntuleru[rapuntuleru]/2007年 04月 01日 07時 06分
/更新:2007年 04月 01日 07時 06分
Re:「Java+MySQL+Tomcatで作る掲示板とブログ」p95で躓きました・・
by KILROY[KILROY]
それは、BbsArticleList.java と同じ場所に BbsArticle.java がないから起きるのだと思います。
Java のコンパイラは、Java のソースコード中で別の Class を参照しているのを見つけると、その Class の .class ファイルを探し、その .class ファイルの中身から、当該コードをどうコンパイルするかを決定します。で、そのとき .class ファイルが見つからない場合、そのクラスの .java ファイルを探してコンパイルします。
ですから、この場合は
BbsArticleList.java をコンパイルしようとする→ BbsArticle って何だ?→ BbsArticle.class はどこだ?→ない!じゃあ BbsArticle.java はどこだ?→ない!→「シンボルを解決できません」。
ということになっているわけです。
このあたり、リンカがどうとかオブジェクトのタイムスタンプがこうとか巡回参照がなんだとかいったややこしい話が山ほどあるのですが、割愛します。ただ、一つだけ注意事項。
「あるソースファイルを直した結果、うまくいかなくて元の古いファイルで上書きするとき、古いファイルを直接コピーするとたぶん変なことが起きる。必ず、古いファイルは『一度エディタで開いて、そのまま修正せずにセーブする(あるいは、touch コマンドを使う)』などして、日付・時刻を最新にしておくこと。」
これでハマっちゃうヒトが(職業プログラマでも)けっこういます。お気をつけを。
Java のコンパイラは、Java のソースコード中で別の Class を参照しているのを見つけると、その Class の .class ファイルを探し、その .class ファイルの中身から、当該コードをどうコンパイルするかを決定します。で、そのとき .class ファイルが見つからない場合、そのクラスの .java ファイルを探してコンパイルします。
ですから、この場合は
BbsArticleList.java をコンパイルしようとする→ BbsArticle って何だ?→ BbsArticle.class はどこだ?→ない!じゃあ BbsArticle.java はどこだ?→ない!→「シンボルを解決できません」。
ということになっているわけです。
このあたり、リンカがどうとかオブジェクトのタイムスタンプがこうとか巡回参照がなんだとかいったややこしい話が山ほどあるのですが、割愛します。ただ、一つだけ注意事項。
「あるソースファイルを直した結果、うまくいかなくて元の古いファイルで上書きするとき、古いファイルを直接コピーするとたぶん変なことが起きる。必ず、古いファイルは『一度エディタで開いて、そのまま修正せずにセーブする(あるいは、touch コマンドを使う)』などして、日付・時刻を最新にしておくこと。」
これでハマっちゃうヒトが(職業プログラマでも)けっこういます。お気をつけを。
投稿:KILROY[KILROY]/2007年 04月 01日 09時 58分
/更新:2007年 04月 01日 09時 59分
結果の先取りになるので1から学習している方には言うべきことではないかもしれないが、フォルダ X にある完成形の BbsArticleList.java をコンパイルするのに必要なファイルは、
参考まで。
BbsArticle.java (最新は X フォルダの中)
BbsSettings.java ( S フォルダの中)
SessionTimeoutException.java ( H )
SimpleEmail.java ( Q )
TextConv.java (最新は D )
である。参考まで。
投稿:KILROY[KILROY]/2007年 04月 01日 10時 45分
/更新:2007年 04月 01日 10時 45分
回答ありがとうございます。
解決しました!また質問で書き込むかもしれませんが、その時も、もしよければよろしくお願いします。
ありがとうございました。
解決しました!また質問で書き込むかもしれませんが、その時も、もしよければよろしくお願いします。
ありがとうございました。
投稿:rapuntuleru[rapuntuleru]/2007年 04月 02日 00時 23分
/更新:2007年 04月 02日 00時 23分