• ベストアンサー

シンボルが解釈できない???

ファイルは全て同じディレクトリ中に入っています。 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; }   以上です。なぜ解釈処理されないか原因が分かりません。アドバイスお願い します。

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

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.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/ を参照されることを強くお薦めします。

参考URL:
http://java-house.jp/ml/archive/j-h-b/021880.html, http://java-house.jp/ml/archive/j-h-b/023336.html

その他の回答 (4)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

他の方(No.2 の aton さん)の補足要求の蒸し返しになってしまうのですが、 Item.class というファイルは Items.java (sがついた方ですよ!)をコンパイルしようとしている ディレクトリにあるのですか?

tel
質問者

お礼

Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。

noname#16216
noname#16216
回答No.3

同一のディレクトリに存在するということですが、classpathにカレントディレクトリが設定されていますか? No.1の方が指摘されているように、javaのコンパイラは例え同一のディレクトリ内であっても、そのディレクトリにclasspathが通っていないと、シンボルの解釈をしてくれません。 classpathにカレントディレクトリ「.」か「.\」を追加してやるか、同一ディレクトリ内の全てのjavaファイルを一度にコンパイル(「C:\test> javac *.java」とか)すれば上手くいきませんか?

tel
質問者

補足

Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。

  • aton
  • ベストアンサー率47% (160/334)
回答No.2

もう少し正確な情報が欲しいので,とりあえず補足要求を。 1) Item クラス(Item.java ファイル)だけのコンパイルは通りますか? 2) 1で Item.java をコンパイルしたとき,Item.class ファイルはどこにできますか? 3) それは Items.java ファイルがあるのと同じフォルダーですか?

tel
質問者

お礼

Classpathの設定でディレクトリ名を全部記入していた結果だめだったみたいです。例えば C:\ab\cd\ef\gのディレクトリのgを外したらコンパイルできました。 なぜか理由はわからないんですけど・・・。 いろいろご迷惑おかけしました。

tel
質問者

補足

補足いたします。 >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)
回答No.1

> なぜ解釈処理されないか原因が分かりません。 私にだって正確なところは分かりません :-) ありそうなこととして、その class Item をコンパイルした結果の Item.class は classpath が通ったところに存在していないんじゃないでしょうか? コンパイラはソースを見てくれるわけではありません。利用しているクラスがあるならば その .class ファイルが必要です。