java.lang.NoSuchMethodError-Ljava/lang/String;)Ljava/lang/String;

java.lang.NoSuchMethodError-Ljava/lang/String;)Ljava/lang/String;,java,Java,我的代码在下面给出了一个错误 线程“main”java.lang.NoSuchMethodError中出现异常: com/myApp/Client.cypherCBC(Ljava/lang/String;)Ljava/lang/String 但它在另一个本地环境中运行良好。我的代码如下 try { System.out.println("Encrypted CBC passwd : " + Client.cypherCBC("CypherThePassword"));

我的代码在下面给出了一个错误

线程“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”,该方法获取字符串参数,但在运行时,类装入器装入了“Client”类,该类没有这种方法(相同的名称和相同的签名)

如果可以在运行时调试应用程序,请在引发异常的行上放置一个断点,然后尝试计算以下表达式

Client.class.getResource("Client.class")

,然后您可以找到该类的来源,然后您可以反编译并尝试解决该问题

在Weblogic中运行web应用程序时,我遇到了相同的错误。 此错误的原因是环境中存在两个版本的类。若要解决此问题,必须确定运行时使用的是哪个.class。 我使用下面的代码来确定在运行时加载了哪个类

-详细:类


这听起来像是底层依赖项已经改变了(读:两个地方的jar不一样)。你可以改进你的问题。请阅读。当你的代码显示出你的确切问题时,你是在向那些自愿帮助你的人表示敬意。如果你将代码格式化以消除滚动,你会让其他人更容易帮助你。看起来你需要传递字符串数组和
cypherCBC()的代码
和完整的堆栈跟踪到投影工作(远程机器),我无法调试,甚至看不到构建路径。JAR位于src文件夹中,build.xml将JAR的位置作为pathelement,它位于src文件夹中。但是运行Client.class.getResource(“Client.class”)会给我jar:file:/vobs/vob_central/gaia/lib/gas.jar/com/aldata/gaia/server/impl/service/Client.class注意这里我有新的gas.jar,location/vobs/vob_central/gaia/lib/gas.jar有旧的jar。但是,即使我在src文件夹中有我的新jar,并且它应该只采用这个路径,那么这个类已经从jar/vobs/vob_central/gaia/lib/gas.jar加载。我没有告诉你关于“src”文件夹的事,它是部署环境中的一个文件夹。我假设您使用的是java默认类加载器URLListClass加载器,这个加载器有一个在-classpath中提到的所有JAR的URL列表。它根据给定的顺序遍历URL,因此这个/vobs/vob_central/gaia/lib/gas.jar位于列表的顶部,您想要的jar位于列表的底部还有一件事,即使您的应用程序在远程机器上运行,您也可以尝试远程调试。如果防火墙或访问权限不允许这样做,请尝试将整个应用程序转储到本地计算机