- ベストアンサー
シンボルが解釈できない???
ファイルは全て同じディレクトリ中に入っています。 ItemS.javaというファイルをコンパイルするとシンボルを解釈処理できません,というエラーが表示されます。ソース内容は以下です。 //商品ID指定による商品の検索 public Item getItem(int id) { Item item = null; for(int i = 0; i < items.size(); i++) { item = getItemByIndex(i); if(item.getId() == id) { return item; } } return null; } <エラー内容MS-DOSより> Items.java:39:シンボルを解釈処理できません。 シンポル : クラス Item 位置 :Itemのクラス public Item getItem(int id) { ^ という内容です。 ちなみにItem.javaの一部ソース内容です。 private int id; public class Item { public Item(int id, String name, double price) { this.id = id; } //商品IDプロパティ public void setId(int id) { this.id = id; } public int getId() { return id; } 以上です。なぜ解釈処理されないか原因が分かりません。アドバイスお願い します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
解決したということなので,今さらかもしれませんが,一応アドバイスなどを。 Java 2 SE SDK 1.2 (俗称 JDK 1.2)以降は,CLASSPATH環境変数は設定しないほうが無難です(特に,初心者の場合)。CLASSPATH環境変数を設定しない場合,基本ライブラリーと拡張ライブラリーディレクトリー下のライブラリー,それにカレントディレクトリーはデフォルトで参照されます。 どうしてもCLASSPATH環境変数を設定する必要がある場合は,先頭に "." ,つまりカレントディレクトリーを指定しておくことをお薦めします。そうすれば,今回のような問題は回避できると思います。 クラスパス関連の情報については,参考URLに挙げた2つの文書を熟読されることをお薦めします。 それから,これは余談になりますが,javacはソースを見てコンパイルしてくれます。つまり,あるソースをコンパイルするとき,そのソースが参照しているクラスも自動的にコンパイルしてくれます(時刻を見て,クラスファイルの方がソースファイルより古ければソースをリコンパイルしてくれる機能もあります)。その辺のことは,ここ↓に書いてあります。 http://java-house.jp/ml/archive/j-h-b/001871.html#body なお,Javaで開発を行われる方全てに対し,何かトラブルに遭ったときは,まず,ここ↓ http://java-house.jp/ml/topics/ を参照されることを強くお薦めします。
その他の回答 (4)
- a-kuma
- ベストアンサー率50% (1122/2211)
他の方(No.2 の aton さん)の補足要求の蒸し返しになってしまうのですが、 Item.class というファイルは Items.java (sがついた方ですよ!)をコンパイルしようとしている ディレクトリにあるのですか?
同一のディレクトリに存在するということですが、classpathにカレントディレクトリが設定されていますか? No.1の方が指摘されているように、javaのコンパイラは例え同一のディレクトリ内であっても、そのディレクトリにclasspathが通っていないと、シンボルの解釈をしてくれません。 classpathにカレントディレクトリ「.」か「.\」を追加してやるか、同一ディレクトリ内の全てのjavaファイルを一度にコンパイル(「C:\test> javac *.java」とか)すれば上手くいきませんか?
補足
Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。
- aton
- ベストアンサー率47% (160/334)
もう少し正確な情報が欲しいので,とりあえず補足要求を。 1) Item クラス(Item.java ファイル)だけのコンパイルは通りますか? 2) 1で Item.java をコンパイルしたとき,Item.class ファイルはどこにできますか? 3) それは Items.java ファイルがあるのと同じフォルダーですか?
お礼
Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。
補足
補足いたします。 >1) Item クラス(Item.java ファイル)だけのコンパイルは通りますか? A> Item.javaはコンパイルできてます。 >2) 1で Item.java をコンパイルしたとき,Item.class ファイルはどこにできますか? 3) それは Items.java ファイルがあるのと同じフォルダーですか? A>Item.classはItem.javaと同じディレクトリにあります。
- a-kuma
- ベストアンサー率50% (1122/2211)
> なぜ解釈処理されないか原因が分かりません。 私にだって正確なところは分かりません :-) ありそうなこととして、その class Item をコンパイルした結果の Item.class は classpath が通ったところに存在していないんじゃないでしょうか? コンパイラはソースを見てくれるわけではありません。利用しているクラスがあるならば その .class ファイルが必要です。
お礼
Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。