0

だから、私はEclipseで作業していて、すべてが正しくコンパイルされて実行されていました。ただし、ビルドサーバーのantでコンパイルすると、多数のテストが失敗し、NoSuchMethodErrorが次のように表示されます。

クラスAはB
インターフェイスを実装しますBはCCを拡張します
CはメソッドgetSyncID()//intフィールドの標準ゲッターを必要とします。
A.javaにはgetSyncID()が含まれていますA.classにはgetSyncID()
が含まれています

それでもエラーはスローされます。

誰もがこれがどのように起こる可能性があるか知っていますか?それを修正する方法。

4

2 に答える 2

1

これは、クラスファイルが互いに同期しなくなったときに発生します。つまり、1つは新しいバージョンにコンパイルされ、もう1つはコンパイルされませんでした。クリーニングして最初から再構築してみてください。

于 2010-06-09T20:58:00.173 に答える
0

この問題は、あるクラス (A) のメソッドが、存在しない別のクラス (B) のメソッドを呼び出していることをクラス ローダーが検出したときに発生します。根本的な原因は、クラス ローダーが認識するクラス B が、コンパイラが A をコンパイルしたときに認識したクラス B と異なることです。

この問題の最も一般的な原因は、@MarkPeters が言うように、「.class」ファイルが「.java」ファイルと同期していないため、最初から再コンパイルする必要があることです。

もう 1 つの可能性は、アプリケーションを実行しようとしたときに、クラスパスに「.class」ファイルの一部の古いコピーがあることです。

しかし、いずれにせよ、クラスローダを信じなければなりません。メソッドがそこにないと言う場合、それはそこにありません...それがロードしている特定の「.class」ファイルにあります。メソッドが「.class」ファイルにあるように見える場合、それは、クラスパスの前の方に別のバージョンのファイルをロードしている証拠です!

于 2010-06-09T23:27:06.230 に答える