3

リンクされた 2 つのプロジェクトがあり、これらの 2 つのプロジェクトにはそれぞれパッケージがあります。

XProject -> XPackage -> XClass -> X1Method(); X2メソッド();

YProject -> YPackage -> YClass -> Y1Method();

Y1 メソッドから X1 メソッドと X2 メソッドを呼び出そうとしています。X1 メソッドを呼び出すことはできますが、X2 メソッドを呼び出すと実行時エラー (java.lang.NoSuchMethodError:) が発生します。

すべてのメソッドは公開されており、メソッド名に問題はありません。そのうちの 1 つが機能しているのに、他の人が実行時エラーを出しているというのはナンセンスです。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

java.lang.NoSuchMethodErrorjavadocから:

アプリケーションがクラス (静的またはインスタンス) の指定されたメソッドを呼び出そうとし、そのクラスにそのメソッドの定義がなくなった場合にスローされます。

通常、このエラーはコンパイラによってキャッチされます。このエラーは、クラスの定義が非互換に変更された場合にのみ、実行時に発生する可能性があります。

つまり、実行時クラスパスには、コンパイル時のクラスパスで利用可能であったにもかかわらず、目的のメソッドを持つクラスが含まれていません。要約: クラスパスがめちゃくちゃです。クリーンアップして整列します。それを行う方法は、環境によって異なります。

更新: したがって、これは Eclipse の Java EE Web アプリケーションですか? 1 つが動的 Web プロジェクトで、もう 1 つが通常のJava プロジェクトであると仮定すると、動的Webプロジェクトのプロジェクト プロパティで、ビルド パスJava EE モジュールの依存関係に通常のJava プロジェクトを追加する必要があります。

それでも問題が解決しない場合は、アプリケーションサーバーまたは JRE のデフォルトのクラスパスがダーティである可能性が高くなります。不要なプロジェクト関連のライブラリを から削除しJRE/lib、それらのライブラリ パスにはもう触れないことを約束する必要があります ; JRE/lib/ext)Tomcat/lib

于 2010-04-15T16:36:05.697 に答える
0

クラスパス内の XClass の .class に対してコンパイルしている可能性が非常に高いです。しかし、ランタイム (おそらくリンクされたプロジェクト) には異なるバージョンの XClass があります。これは環境固有です。コンパイル中にクラスパスに含まれるアーティファクトと、実行中に取得されるアーティファクトを確認する必要があります。

他の方のコメント通り。さらに回答するには、IDE/ビルドシステムまたはコードに関する詳細が必要です。

于 2010-04-15T16:35:17.233 に答える