How to get java.lang.NoSuchMethodError

后端 未结 2 622
闹比i
闹比i 2021-01-03 07:03

Introduction:

There are many questions as How to fix java.lang.NoSuchMethodError on SO.

As I can see, the simplest way to get this error, is to make a clas

相关标签:
2条回答
  • 2021-01-03 07:43

    Create a class file from a class which calls java.util.Properties.load(Reader) in its main method with some Java version >= 1.6.xxxx.

    Attempt to execute this class using some Java version < 1.6.xxxx

    Reason: java.util.Properties.load(Reader) was introduced in Java 6. It is being called, but does not exist in this version of Java.

    This applies similarly to all methods introduced to the default language libraries in updates.

    0 讨论(0)
  • 2021-01-03 08:05

    NoSuchMethodError happens if one class expects a method in another class (and was compiled with that method in place), but at runtime the other class does not have that method. So you need to:

    • create two classes, one of which calls a method on the other
    • compile the two classes
    • then remove the invoked method from the 2nd class, and compile the 2nd class only

    Then, if you run the first class (with main method), it will throw that error when trying to call the method on the 2nd class (the method no longer exists)

    This example would rarely happen in the real world though. Here are some real cases when the error occurs:

    • You are using a 3rd party library (jar) that depends on another jar. However you are having incompatible versions of those jars, and the 1st one tries to invoke a method on a class in the 2nd jar that does not exist anymore/yet.
    • Your compile-time and runtime classpaths differ - you have compiled your code against a version of some library (that can also be the JDK itself), but your runtime is having other versions
    • You have a multi-module project. Your IDE "links" the project at compile-time, so any changes is seen immediately. But when you build you forget to compile one of the modules (where you have added a method), so at runtime it is using the old version.
    0 讨论(0)
提交回复
热议问题