どうしたらいいでNoSuchMethodError?
-
09-06-2019 - |
質問
もしかしたら、 NoSuchMethodError
定期点検中の場合もあります私のJavaプログラム。何が悪いとどうしたらいいですか?
解決
な情報を判定することが難点で問題が根本原因はいくためにクラスに対し、別バージョンのクラスが欠ける方法を使い実行する場合です。
のスタックトレース...の場合は例外が呼び出し時に方法でオブジェクトには、図書室、その利用の別バージョンの図書館ンパイルするときにいよいよスタートしました。があることを確認してください右版の両方。
の場合は例外が表示されますメソッドを呼び出オブジェクトのインスタンス化による授業 す して、その構築過程が故障している。ただのクラスファイルと実際の走行を更新しましたときにコンパイル。
他のヒント
しかし問題は、このようにのんびりと固定します。は、以下の手順に従って作業を可能にしました。また、第二段階が思っ最後のドラッグすることにより".jarファイルから直接ファイルシステムの"lib"フォルダに自分のeclipseプロジェクト.また、私の以前のバージョンの図書館からのパスの"lib"フォルダにまとめた。
ステップ1-。jarへのパスの構築
ステップ2-准源javadocs(オプション)
ステップ3-実際にドラッグ.jarファイルlibフォルダ(オプション)
るということに注意してくださる場合の反射が得られます NoSuchMethodException
, が非反射コード、 NoSuchMethodError
.してしまいがちなりに非常に異なる箇所と対峙した時に一対のです。
アクセスできる場合は変更のJVMパラメータの追加の詳細出力を許可すべきかに授業がロードからJar.
java -verbose:class <other args>
プログラムでは、JVMはダンプを標準出などの情報:
...
[ロード程度php,c#,d.枠組みを主張するならfile:/C:/Program%20Files/junit3.8.2/junit.jar]
...
この原因は普通の場合のようなシステムの構築 Apache Ant る統javaファイルが、javaファイルの最新情報をメールにてお届けし、クラスファイルです。場合はメソッドシグニチャーの変化とクラスを使用した古いバージョンもありませんとりまとめます。通常の固定であることを示すインターフェースの再構築(通常は"antクリーン"そして"ant").
あることもでき起こンパイルするときに防ショールーム:イメージはライブラリが走行に対する異なるバージョン。
を使用する場合は Maven または別の枠組み、このエラーがほぼランダムにしてみるクリーンインストールしてもらいました。
clean install
これは特に仕事を書くのオブジェクトあけましておめでとうございますので、方法。勤務しました。
このものを使用している。だいコードを反映したプロセスを抽出法による名(例:と Class.getDeclaredMethod("someMethodName", .....)
させるメソッド名の変更などの中に、refactorる必要がありまを更新するようにしてくださいパラメータは、反射法に合わせて新しいメソッドシグニチャー、または getDeclaredMethod
通話する NoSuchMethodException
.
この理由は、スタックトレースが必要であるこの点を反射のメソッドが呼び出され、まだアップデートの必要パラメータを実際の方法である。
私の経験上、これが時としてユニット検査の民間法/分野を使用 TestUtilities
クラスの抽出分野検証を行います。一般的には従来のコードを見込んで設計ユニットテストです。)
を書いていてwebappの確保という相反するバージョンのjarコンテナのグローバル図書館のディレクトリにもアプリです。おなかのjar作成されているクラスローダ.
例えば
- tomcat/common/lib
- mywebapp/WEB-INF/lib
これらの問題のご利用に起因する同じオブジェクトのクラスは二つ。使用されるオブジェクトを含まない新しい方法が追加されていることは、新しいオブジェクトのクラスが入っています。●
ex:
filenotnull=/DayMoreConfig.conf
16-07-2015 05:02:10:ussdgw-1: Open TCP/IP connection to SMSC: 10.149.96.66 at 2775
16-07-2015 05:02:10:ussdgw-1: Bind request: (bindreq: (pdu: 0 9 0 [1]) 900 900 GEN 52 (addrrang: 0 0 2000) )
Exception in thread "main" java.lang.NoSuchMethodError: gateway.smpp.PDUEventListener.<init>(Lgateway/smpp/USSDClient;)V
at gateway.smpp.USSDClient.bind(USSDClient.java:139)
at gateway.USSDGW.initSmppConnection(USSDGW.java:274)
at gateway.USSDGW.<init>(USSDGW.java:184)
at com.vinaphone.app.ttn.USSDDayMore.main(USSDDayMore.java:40)
-bash-3.00$
これらの問題による併02類似クラス(1src,1のjarファイルはこちらgateway.jar)
で、それぞれの方法が存在しないクラス:
- ご利用の場合はjarを逆コンパイルにチェック場合は、それぞれの版のjarて適切なクラスです。
- チェックすめの適切なクラスからのソースです。
私にとってそうでない引数の型の関数は、オブジェクト、文字列。私は解決でクリーンの再構築
私は、このエラーによる再起動マEclipseとのapplcation.その理由を私の場で交換私のソースファイルを開いたプロジェクトまたはEclipse.により別バージョン授業しました)。
これをやってみましょう:削除します。クラスファイルのプロジェクトディレクトリは、もちろん、すべてのサブディレクトリ).しまいます。
時には mvn clean
(ご利用の場合はmavenいます。クラスファイルを手動で作成した javac
.や古いファイルを含む旧署名し、 NoSuchMethodError
.
を追及するとともに、既存の答えなのです。面したこの問題tomcatにはeclipse.変更があった一つのクラスとした次の段階
洗浄のプロジェクトeclpise
mvnクリーンインストール
- 再tomcat
未だに面した同じエラーになります。その 掃除しtomcatには、洗浄tomcatには作業ディレクトリ 再開しましたが、サーバーに問題がなくなっています。武器agiは、dexで下がらないboxerぐ人
私は固定この問題をEclipse名前を変更したり、程度php,c#,dに試験のファイルです。
私の食事スペースしているアプリのプロジェクト試験プロジェクト.
この試験プロジェクトは、アプリのプロジェクトとして必要なプロジェクトを構築。
始めてのNoSuchMethodError.
そしてこのクラスの試験プロジェクトと同じ名前のクラスは、アプリのプロジェクト.
App/
src/
com.example/
Projection.java
Test/
src/
com.example/
Projection.java
後の名前変更、本試験の結果をもとに、正しい名前"ProjectionTest.java"の例外がすっかりなくなりました。
また同様の問題があった署名の変更方法は私の願います。洗浄再構築プロジェクトの解決の"NoSuchMethodError".
以上の答えを説明しく..るだけで追加一つのこと ご利用の場合は使用eclipseを使用ctrl+shift+T入力のパッケージ構造のクラスの例:ザゲートウェイがあります。smpp.PDUEventListener、すべてのjarファイ-プロジェクトです。削除は不要からjarをclasspathに追加上記のクラスパスです。今までお迎えに正しいです。
また同様の課題です。
Caused by: java.lang.NoSuchMethodError: com.abc.Employee.getEmpId()I
最後に僕の根本原因の変化のデータタイプに変更します。
Employee.java
-->に変数(EmpId
データタイプに変更してからint
へString
.ReportGeneration.java
-->値を取得しのゲッターgetEmpId()
.
うことになりますがrebundle、jarを含むが更新された。としての変化はありません ReportGeneration.java
ただ、今までの Employee.class
にJarファイルです。があったので、 ReportGeneration.class
ファイル、jarを解決する問題です。
また、同じ問題です。このものより多義性を持つ。私のプログラムしようとしないメソッドを呼び出した二つのJARファイルの現在の位置はクラスパスです。削除JARファイルを実行するコードが唯一のJARファイルを使用します。チェックを使用しているのではない同一のJARまたは異なるバージョンと同一のJARを含むを同じクラスです。
DISP_E_EXCEPTION[step][][Z-JAVA-105Javaの例外は、java.lang.NoSuchMethodError(com.例です。yourmethod)]
回答の質問です。Javaの基準に従ったdocs こちらの:
"NoSuchMethodError"スローされる場合、アプリケーションを呼び指定方法クラスはstaticまたはインスタンスは、クラスな定義の方法です。
通常、このエラーによってキャッチされていますコンパイラの;このエラーで起こる実行時の場合の定義クラスincompatiblyを変更します。
- この時、チェックを含むクラスのクラスのメソッドのクラスパスです。
- チェック追加した場合新しいバージョンのJARに対応しています。
しjava.lang.NoSuchMethodErrorで獲れるコンパイラが常に起こり得るものである。このエラーが発生した実行時にその理由の変化は、クラスの構造と相容れないものがある。
ベスト説明: https://www.journaldev.com/14538/java-lang-nosuchmethoderror
またこのエラーです。
私の問題があったん変更、メソッドの署名ないことから、
void invest(Currency money){...}
入
void invest(Euro money){...}
このメソッドを呼び出しからのコンテキストと同様
public static void main(String args[]) {
Bank myBank = new Bank();
Euro capital = new Euro();
myBank.invest(capital);
}
コンパイラのた静かについて警告/エラーとして資本は通貨とユーロとなります。
問題の登場により、このまとめのクラスは、法定の銀行ではなく、クラスのメソッドが呼び出、分解されるのではなく保持されま()メソッドがあります。
この問題られるものではありませんが出会い、多くの場合、として最も多くのプロジェクトを構築しmannuallyまたはビルドアクションの実行を自動的にだけではなく、"作成の修飾クラスです。
私の利用したい発生する。jarファイルにしたとして使用するhotfix、を含まないApp.class どこませんでしたが変更されます。これは私としていませんでしていた最初の引数の基底クラスの底を継承関係を示します。
このことがきめのクラスのbytecodeは 静的, 言葉で ハード参照.
解したbytecode(生成されますjavapツール)のようになります。
#7 = Methodref #2.#22 // Bank.invest:(LCurrency;)V
後のクラスローダの荷重の作成Bank.classまな方法では、が表示されていれば削除したとき、変更されませんので、この名前のエラーになります。
武器agiは、dexで下がらないboxerぐ.
問題は私の場合と二つのバージョンで同じライブラリーを構築。古いバージョンの図書館を持っていない機能、新作のかった。
また同様の問題が私のGradleプロジェクトを使用Intelij.まるで削除する。gradle(画面下)パッケージを再構築プロジェクト..gradleパッケージ
NoSuchMethodError:思い過ご夫婦の時間を固定し、この問題の最後に固定しているだけで名を変更したいパッケージ名で、清潔な造り---うクリーンを構築第っていることを確認してください作品のう名前の変更、クラス名またはパッケージ名を、クリーンを構築で無償で利用することができる。テレビでも展開しております。
また、同じエラー:
Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonGenerator.writeStartObject(Ljava/lang/Object;)V
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:151)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)
これを解決するために私は、まず、 モジュールの依存関係図 (click in your POM the combination -> Ctrl+Alt+Shift+U
または right click in your POM -> Maven -> Show dependencies
これがそうした紛争の間のライブラリ(Intelij)このメソッドをオーバーライド.私の特定の場合には、異なるバージョンのジャクソンの依存関係.
1)では、直接私のPOMのプロジェクトを明示的に最高のバージョン-2.8.7れます。
物件:
<jackson.version>2.8.7</jackson.version>
として依存関係:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
2)もありますが、それでは解決でき 依存関係の排除.
同じ原則として以下の例:
<dependency>
<groupId>group-a</groupId>
<artifactId>artifact-a</artifactId>
<version>1.0</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</exclusions>
</dependency>
依存性との不要なバージョン対象から除外することができます。
場合はファイル名以外のクラス名を含有する主な方法である可能性このエラーが発生する可能性があります。