• ベストアンサー

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

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

  • tel
  • お礼率66% (294/439)
  • Java
  • 回答数5
  • ありがとう数3

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

  • ベストアンサー
  • 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 ファイルが必要です。

関連するQ&A

  • シンボルの解釈処理エラー

    http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/545.zip 上記のプログラムをコンパイルした所、以下のエラーが出て来ました。 javaを始めたばかりで、直し方が分かりません。 どなたか教えてもらえないでしょうか。 1.J120902のエラー kaguhls4% J120902.java:17: ';' がありません。 private enum Emode {sin.cos}; ^ J120902.java:17: シンボルを解釈処理できません。 シンボル: クラス enum 位置 : J120902 の クラス private enum Emode {sin.cos}; ^ J120902.java:18: シンボルを解釈処理できません。 シンボル: クラス Emode 位置 : J120902 の クラス private Emode mode=Emode.sin; ^ J120902.java:50: シンボルを解釈処理できません。 シンボル: メソッド setPreferredSize (java.awt.Dimension) 位置 : J120902 の クラス this.setPreferredSize(new Dimension(1200,400)); ^ J120902.java:88: シンボルを解釈処理できません。 シンボル: 変数 BLUE 位置 : java.awt.Color の クラス g.setColor(Color.BLUE); ^ J120902.java:90: シンボルを解釈処理できません。 シンボル: 変数 RED 位置 : java.awt.Color の クラス g.setColor(Color.RED); ^ エラー 6 個 2.J120905のエラー kaguhls4% J120905.java:77: シンボルを解釈処理できません。 シンボル: メソッド setPreferredSize (java.awt.Dimension) 位置 : J120905 の クラス this.setPreferredSize(new Dimension(kPanelSize,kPanelSize)); ^ エラー 1 個

  • シンボルが解決できません

    import java.applet.*; import java.awt.*; public class keiin extends Applet implements Runnable { int narabi[]=new int[10]; public void init(){ } public void start() { } public void paint(Graphics g) { for (int i=0; i==kun+1; i++) { g.drawString(narabi[i],i*30,30); } } public void run() { repaint(); num++; } } public void update(Graphics g) { paint(g); } } というプログラムを作っていて、javacでコンパイルすると、 「C:\Documents and Settings\Administrator\My Documents\ycworks\java\keirin\0.01\keiin.java:49:シンボルを解決できません。 シンボル:メソッド drawstring(int,int,int) 場所:java.awt.Graphicsのクラス g.drawString(narabi[i],i*30,30); ^ と出て、コンパイルされません。 Javacのある場所を環境変数に登録してコンパイルしてみたり、配列変数がおかしいのかと思い、narabi[i]を文字列(g.drawstring("hoge",50,30);)にしたり、試してみたのですが、効果なしです。 解決方法を教えてください

  • ArrayListのバージョン変換

    今、JAVAを勉強しているのですが、環境の問題でJAVA1.4しか使えません。 しかし、市販の本を購入し、プログラムを書いて練習していたら、JAVA5.0のプログラムでした。 下記のプログラムを1.4のバージョンに変更するにはどうしたらいいのでしょうか?? ---プログラム--- import java.util.ArrayList; public class ItemCollection { //商品一覧を保持するArrayList protected ArrayList<Item> list; //商品一覧に対するGETTER,SETTER public ArrayList getList(){ return this.list; } public void setList(ArrayList<Item> list){ this.list = list; } //引数のないコンストラクタ public ItemCollection(){ } //商品一覧に商品を追加 public void addItem(Item item){ list.add(item); } //商品一覧に商品を参照 public Item getItem(int index){ return list.get(index); } //商品一覧の数を返す public int getSize(){ return list.size(); } }

    • ベストアンサー
    • Java
  • ArrayListを使った多次元配列の比較方法

    JAVAでArrayListを使った多次元配列の要素を比較方法で困っています。 下記のコードで、アイテム、数量、金額をランダムに10個配列に追加しています。 private ArrayList<Item> list; public ArrayList<Item> getItems1() { return list; } public void setItems(ArrayList<Item> items) { getItems(); } public Inventory() { list = new ArrayList<Item>(); } public void getItems(){ for(int i =0; i<10; i++){ int theItemType = (int)(Math.random()*6+1); int theQut = (int)(Math.random()*20+1); int thePrice = (int)(Math.random()*40+101)/20; list.add(new Item(theItemType, theQut, thePrice)); } } public String getItemName() { if(itemType == 1){ return "シャツ"; } if(itemType == 2){ return "スカート"; } if(itemType == 3){ return "ズボン"; } if(itemType == 4){ return "ネクタイ"; } if(itemType == 5){ return "靴"; } if(itemType == 6){ return "靴下"; } return null; } public String toString() { return getItemName() + " , " + getQut() + " " + getPrice(); } 同じアイテム、金額の場合は、数量を合計して表示させたいです。例えば、配列の要素が下記のような場合、1つ目と2つ目の要素は同じアイテム、金額になるので、数量を20として表示させたいのですが、どのように比較していいのかわかりません。どなたか教えてください。よろしくお願いします。 靴下 , 4, 5 靴下 , 16, 5 ネクタイ , 3, 5 ネクタイ , 16, 6 ネクタイ , 2, 6 ズボン , 16, 6 ズボン , 15, 6 スカート , 3, 6 靴 , 17, 7 シャツ , 17, 7

    • ベストアンサー
    • Java
  • JavaBeansにDBの値を格納

    JavaBeansにDBの値を格納したいのですがやり方がよくわかりません。 どなたかわかる方教えていただけないでしょうか? ちなみにこんなやり方でやってみました。 DAOは int i = 0; while(rs.next()){    jb.setId(i,rs.getString("syouhinid"));    i++; } JavaBeansは private String[] id = null; public void setId(int i, String val){ this.id[i] = val; } public String getId(int i){ return id[i]; } こんな感じです。 部分的ですがこんな感じです。 ソースコードを全部乗せると長くなるので、全部乗せられませんが、 いまいちJavaBeansにDBの値を格納するやり方がわからないので 皆さん色々教えてください。宜しく御願い致します。

  • 小町算

    #include<stdio.h> #define KETA 9 #define SIN_SU 3 #define GOOD 100 int next(int symbol[]); void int_set(int symbol[]); void myprint(int symbol[]); int check(int symbol[]); main() { int symbol[KETA]; int_set(symbol); do{ if(check(symbol)) myprint(symbol); }while(next(symbol)); } int next(int symbol[]) { int i=KETA; do { if(++symbol[i]<SIN_SU) return symbol; symbol[i]=0; }while(i--); return 0; } void int_set(int symbol[]) { int i; symbol[0]=1; for(i=1;i<KETA;i++) symbol[i]=0; } void myprint(int symbol[]) { int i; for(i=0;i<KETA;i++) { if(symbol[0]==1) ; else if(symbol[i]==1) printf("+"); else if(symbol[i]==2) printf("-"); printf("%d",i+1); } } int cheak(int symbol[]) { int num=0; int result=0; int i; for(i=0;i<KETA;i++) { if(symbol[i]==0) num=10*num+(i+1); else{ if(symbol[i]==2) { result+=-1*num; num=i+1; } else { result+=symbol[i]*num; num=i+1; } } } if(result==GOOD) return 1; else return 0; } このプログラムの関数nextのところのreturn symbolが 思うとおりに動きません。どなたか教えていただけないでしょうか?

  • メールでの返答の解釈で困っています。

    いつもお世話になります。 今日は、メールで商品が届かないので、いつごろ送ってもらえるか、連絡を下さいという内容のメールを返信していただいた内容のメールの解釈にアドバイス頂きたく、相談に来ました。 御忙しい所、申し訳ありませんが、よろしくお願い致します。 私の解釈は、こう感じました。。。 よろしく、貴方のアイテムはメールされて、二、三日中に到着しなければなりません。 習慣を行っているアイテムは、少しより長く取ります。 頂いたメールの内容です。 Hello Your items were mailed and should arrive in a few days. Items going through customs take a little longer. 既に送っていただいたのか、もう少し時間がかかるのか良く分からず困っています。来週で、アイテムを購入して、一ヶ月になるので、 送金して、返金期限(送金日から45日以内)をすぎる前に送って頂きたいのですが。。。 とても困ってしまっています。メールをするとお返事は頂けるので、私の解釈の違いなのでは?と思っていますが、不安です。 アドバイス頂けましたら幸いです。

  • ibatis select複数件の受入方について

    SqlMap.xmlにて </select> <select id="getDept" resultClass="blog.Dept"> SELECT * FROM blog </select> Deptにて; public class Dept { private int id[]; public int[] getId() { return id; } public void setId(int[] id) { this.id = id; } blogArticle.javaにて public void load()throws Exception { SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance(); sqlMap.startTransaction(); Dept dept = (Dept)sqlMap.queryForObject("getDept"); sqlMap.commitTransaction(); } 以下のエラーが出てしまいました No type handler could be found to map the property 'id' to the column 'id'. One or both of the types, or the combination of types is not supported. . deptのところを private int id[]; public int[] getId() { return id; } public void setId(int[] id) { this.id = id; から private int id; public int getId() { return id; } public void setId(int id) { this.id = id; に変えるとエラーは無くなりますが・・・ しかしながら配列型のBeanでは受入はできないということでしょうか。うまい方法はないでしょうか。 ご教授の程よろしくお願い申し上げます。

  • シンボルが見つけられません。8個のエラー。

    シンボルが見つけられません。 8個のエラーメッセージがでました。 何度も打ち直しましたが、これ以上減りません。 ドコが誤ってますか? ご多忙中申し訳ありません。 ご回答の程、宜しくお願い申し上げます。 import java.applet.*; import java.awt.*; import java.util.*; public class DigitalClock extends Applet implements Runnable { Thread thread = null; Image Digit[ ] = new Image[11]; int DigitWidth, DegitHeight; Image WorkImage; Graphics WorkGraphics; int AppletWidth, AppletHight; //初期化処理---------------------------------------------------- public void init() { AppletWidth = getSize().width; AppletHight = getSize().height; WorkImage = createImage(AppletWidth, AppletHight); WorkGraphics = WorkImage.getGraphics(); MediaTracker mediaTracker = new MediaTracker(this); for(int i = 0; i < 11;i++) { Digit[i] = getImage(getCodeBase(),"Image/" + i +".gif"); mediatracker.addImage(Digit[i],1); } try{ mediatracker.waitForID(1); } catch (InterruptedException e) { showStatus(""+e); } DigitWidth = Degit[0].getWidth(this); DegitHeight = Digit[0].getHeight(this); } //アプレット開始------------------------------------------------------- public void start() { thread = new Thread(this); thread.start(); } //描画処理-------------------------------------------------------------- public void paint(Graphics g) { g.drawImage(WorkImage, 0, 0, this); } //スレッド処理------------------------------------------------------------ public void run(){ while (thread != null) { DispTime(); repaint(); try { thread.sleep(100); } catch(InterruptedException e) { showStatus(""+e); } } } //描画更新処理再定義---------------------------------------------------------- public void update(Graphics g) { paint(g); } //時間描画-------------------------------------------------------------------- void DispTime() { //カレンダーオブジェクト作成 Calendar date = Calendar.getInstance(TimeZone.getTimezone("JST")); int hour = date.get(Calender.HOUR); int minute = date.get(Calender.MINUTE); int second = date.get(Calendar.SECOND); //作業グラフィックに描画 WorkGraphics.setcolor(color.white); WorkGraphics.fillRect(0, 0, DigitWidth*8, DigitHight); int h1 = hour / 10, h2 = hour % 10; WorkGraphics.drawImage(Digit[h1], 0,0, this); WorkGraphics.drawImage(Digit[h2], DigitWidth*1, 0, this); WorkGraphics.drawImage(Digit[10], DigitWidth*2, 0, this); int m1 = minute / 10, m2 = minute % 10; WorkGraphics.drawImage(Digit[m1], DigitWidth*3, 0, this); WorkGraphics.drawImage(Digit[m2], DigitWidth*4, 0, this); WorkGraphics.drawImage(Digit[10], DigitWidth*5, 0, this); int s1 = second / 10, s2 = second % 10; WorkGraphics.drawImage(Digit[s1], DigitWidth*6, 0, this); WorkGraphics.drawImage(Digit[s2], DigitWidth*7, 0, this); } //アプレット停止 public void stop() { thread = null; } }

    • ベストアンサー
    • Java
  • JDialog でコンパイルエラーになります

    環境:WindowsXP,j2sdk1.4.0 Javaを勉強しているのですが、swingクラスのJDialog ,Jwindowを使用するとコンパイルエラーになります。 (JFrameの場合は、問題なく表示されます) ソースとエラー内容は以下の通りです。 ・ソース import java.awt.*; import java.awt.event.*; import javax.swing.*; class JDialog{ public static void main(String [] args) { JDialog jd =new JDialog(); jd.setBounds(0, 0, 200, 100); jd.setTitle("JDialog Example"); jd.getContentPane(). setBackground(Color.green); jd.addWindowListener(new MyWindowAdapter()); jd.setVisible(true); } } ・エラー内容 JDialog.java:12: シンボルを解釈処理できません。 シンボル: メソッド setBounds (int,int,int,int) 位置 : JDialog の クラス jd.setBounds(0, 0, 200, 100); ^ JDialog.java:13: シンボルを解釈処理できません。 シンボル: メソッド setTitle (java.lang.String) 位置 : JDialog の クラス jd.setTitle("JDialog Example"); ^ JDialog.java:15: シンボルを解釈処理できません。 シンボル: メソッド getContentPane () 位置 : JDialog の クラス jd.getContentPane().setBackground(Color.green); ^ JDialog.java:16: シンボルを解釈処理できません。 シンボル: メソッド addWindowListener (MyWindowAdapter) 位置 : JDialog の クラス jd.addWindowListener(new MyWindowAdapter()); ^ JDialog.java:18: シンボルを解釈処理できません。 シンボル: メソッド setVisible (boolean) 位置 : JDialog の クラス jd.setVisible(true); ^ エラー 5 個 誰か、助けてください!

    • ベストアンサー
    • Java