複数ファイルのプログラム – プログラミング – Home

複数ファイルのプログラム
 
通知
すべてクリア

複数ファイルのプログラム


ゴン
 ゴン
(@ゴン)
ゲスト
結合: 23年前
投稿: 24
Topic starter  

複数ファイルのプログラムですが、なぜかエラーになってしまいます。

--- ABC.java ---
class ABC{
public void test(){
System.out.println(test);
}
}

--- DEF.java ---
public class DEF{
public static void main(String args[]){
ABC dt = new ABC();
dt.test();
}
}

エラー内容
シンボルを解釈処理できません。
ABC dt = new ABC();
^

となってしまいます。
なにか勘違いしていることがあるような気がします。
どなたから教えてください。


引用解決済
トピックタグ
alVa
 alVa
(@alVa)
ゲスト
結合: 22年前
投稿: 9
 

Sourceは特に問題ないとと思います。
考えられる事はABC.javaとDEF.javaを別々のフォルダにいれてコンパイルしてるぐらいです。


返信引用
kody
 kody
(@kody)
ゲスト
結合: 24年前
投稿: 20
 

packageを記述してらっしゃいますか?
複数ファイルを扱うときは、それぞれのファイル、
この場合、ABC.javaとDEF.javaの一番上に、
package DirName;
を入れる必要があります。DirNameは、二つのファイルが入っているディレクトリの名前
です。

コンパイルは、
>javac DirName/*.java
実行は、
>java DirName.package DEF


返信引用
kody
 kody
(@kody)
ゲスト
結合: 24年前
投稿: 20
 

おっと間違い。

実行は、
>java DirName.DEF


返信引用
ゴン
 ゴン
(@ゴン)
ゲスト
結合: 23年前
投稿: 24
Topic starter  

ありがとうございます。できました!

package指定が関係あるとは。勝手に関係ないと思っていました。

上記2つのソースに↓を加えて
package test;
その2つのソースをtestフォルダにコピーしました。

そして、testフォルダの1つ上のフォルダから
javac test/*.java

java test.DEF

で見事実行できました。

ところで、このtestフォルダをカレントにして
java DEF

java test.DEF
とやると
やっぱり、NoClassDefFoundErrorになってしまいます。
こちらについてはしょうがないのでしょうか。


返信引用
毘沙門天
 毘沙門天
(@毘沙門天)
ゲスト
結合: 22年前
投稿: 3
 

Javaコンパイラ、インタプリタは.classファイルを探す際に、以下の順番で検索
を行ないます。
 1.カレントフォルダからの相対パス
 2.CLASSPATH環境変数で指定されたフォルダ
 3.Javaクラスライブラリ

またJavaではpackage指定がないファイルは無名パッケージに自動的に割り当て
られます。従って、カレントフォルダにあるソースのみを使ってコンパイルを
行なう場合にはpackage指定はいらないはずです。

ひょっとしてCLASSPATHを設定しておらず、コンパイル時もソースのあるフォルダを
カレントフォルダにせずにコンパイルを実行していないでしょうか?

少なくとも最後の質問は
 set CLASSPATH=.;%CLASSPATH%
としてから実行すればうまくいくと思います。うまくいったら最初からCLASSPATH
環境変数に「.;」を付け加えておきましょう。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 1.カレントフォルダからの相対パス
> 2.CLASSPATH環境変数で指定されたフォルダ

JavaVM(インタプリタ)の場合はちょっと違います。
CLASSPATHが定義されている場合はカレントフォルダは見ません。
CLASSPATHが未定義の場合カレントフォルダをクラスパスとします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました