我的代码出现以下错误;
Exception in thread "main" java.lang.NoSuchMethodError: com/myApp/Client.cypherCBC(Ljava/lang/String;)Ljava/lang/String;
但它在另一个本地环境中运行良好。到目前为止我的代码如下;
try {
System.out.println("Encrypted CBC passwd : "
+ Client.cypherCBC("CypherThePassword"));
} catch (Exception e) {
e.printStackTrace();
}
这是由于运行时 JAR 或类不匹配造成的。编译应用程序时存在的“Client”类有一个静态方法“cypherCBC”,它获取 String 参数,但在运行时类加载器已加载“Client”类,该类没有这种方法(同名同签名)。
如果您可以在运行时调试应用程序,请在引发异常的行处放置一个断点,然后尝试计算以下表达式,
Client.class.getResource("Client.class")
,然后你就可以找到这个类是从哪里引出的,然后你可以反编译并尝试解决问题。
我在 Weblogic 中运行 Web 应用程序时遇到了同样的错误。 出现此错误的原因是环境中有两个版本的类。要解决此问题,您必须弄清楚运行时正在使用哪个 .class。 我使用以下方法来确定在运行时加载哪个类。
-详细:类
您的类路径上有一个重复的类。 因此,这就是为什么 JVM 会感到困惑,不知道需要选择哪一个,因为这两个类都有相同的方法,但您尝试调用的签名不同。
从 Maven 存储库将 bcprov-jd* Jar 更新到最新版本,它将解决问题