- PR -

メソッドを他のクラスから呼び出びだせない

1
投稿者投稿内容
Js
常連さん
会議室デビュー日: 2002/05/28
投稿数: 25
投稿日時: 2002-06-01 16:17
c:\jwork\abc  
に下記のファイル Class01.java と Class02.java を保存し、コンパイルを行います。

c:\jwork> javac abc\Class02.java ← コンパイルできます

c:\jwork> javac abc\Class01.java
abc\Class01.java:11: シンボルを解釈処理できません。
シンボル: 変数 Class02
位置 : abc.Class01 の クラス
out.println(Class02.returnString());
^
エラー 1 個

というエラーになってしまいます。他のクラスのメソッドを呼び出すことは可能だと
思いますが、なぜエラーになってしまうのでしょうか。ご存知の方がいらっしゃいま
したら教えていただければ幸いです。
環境は Window2000 J2sdk1.4.0 tomcat-3.3.1 です。宜しくお願いいたします。

<Class01.java>
package abc;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class Class01 extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println(Class02.returnString());
}
}

<Class02.java>
package abc;

public class Class02 {

public static String returnString () {
return("Hello World");
}
}
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-06-01 16:34
javac abc\*.java
では駄目ですか?

[ メッセージ編集済み 編集者: H2 編集日時 2002-06-01 16:34 ]
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-06-01 16:45
ちょっと簡単に説明しますね。

問題点:
c:\jwork> javac abc\Class02.java
では、abcディレクトリにClass02.classが作成されます。

c:\jwork> javac abc\Class01.java
時には、Class01から参照するClass02が必要なのですが、クラスパスにはClass02への参照が含まれていません。そのため、「シンボルを解釈処理できません」というメッセージが出るわけです。

解決策:
@c:\jwork> javac abc\*.java
コンパイラが自動的にabcディレクトリ内を調べてくれるでクラスが見つからないということは起きない。

A
c:\jwork> javac abc\Class02.java
c:\jwork> javac -classpath ".\;他のクラスパス" abc\Class01.java
とすれば、.(カレントディレクトリ)からabc.Class02を見つけてくれます。

詳しいことは、参考書のClasspathに関する項目を調べてください。
あと、antのようなビルドツールを使うのもいいですよ。


[ メッセージ編集済み 編集者: H2 編集日時 2002-06-01 16:46 ]
Js
常連さん
会議室デビュー日: 2002/05/28
投稿数: 25
投稿日時: 2002-06-01 17:07
javac abc\*.java
でコンパイルが通りました。
私がやった方法では無理なことも理解できました。
H2さん、どうもありがとうございました。
antについても時間があるときに試してみたいと思います。
1

スキルアップ/キャリアアップ(JOB@IT)