0

別のディレクトリで指定されたインターフェイスを実装する Java クラスを作成しました。次のようにアプリケーションをコンパイルします。

javac ArrayQueue.java -cp QueueArray

このクラスは、 directoryArrayQueueにインターフェイスを実装します。クラスパスが指定されていない場合、コンパイラは予想どおりエラーをスローします。QueueQueueArray

ただし、その後プログラムを実行すると、クラスが見つかりません。

java ArrayQueue -cp QueueArray
Exception in thread "main" java.lang.NoClassDefFoundError: Queue

これを引き起こしている可能性があるのは何ですか?

編集:.classファイルを と同じディレクトリにコピーすると、プログラムは正常に動作しますArrayQueue.class

4

2 に答える 2

1

これは役立つかもしれません。JLS 第 3 版より:

Java プラットフォームの実装は、名前のないパッケージを少なくとも 1 つサポートする必要があります。複数の名前のないパッケージをサポートする場合がありますが、必須ではありません。名前のない各パッケージに含まれるコンパイル ユニットは、ホスト システムによって決まります

パッケージの格納に階層ファイル システムを使用する Java プラットフォームの実装では、名前のないパッケージを各ディレクトリに関連付けるのが一般的な方法の 1 つです。一度に監視できる名前のないパッケージは 1 つだけです。つまり、「現在の作業ディレクトリ」に関連付けられているパッケージです。「現在の作業ディレクトリ」の正確な意味は、ホスト システムによって異なります。

使用している JVM は、現在のディレクトリ (カスタマイズしたキュー クラスを起動するディレクトリ) に関連付けられていない限り、デフォルト パッケージをサポートしていないようです。

一般に、デフォルトのパッケージを使用するのは悪い考えです。私のアドバイスは、両方のクラスをパッケージに関連付け、コードを再コンパイルして再テストすることです。

于 2013-03-11T10:19:57.760 に答える
0

使用するjava -classpath . class_having_main_method

于 2013-03-11T09:59:28.743 に答える