我编写的Java程序在普通Java项目中运行时会发出NoSuchMethodError,但在J2EE Web项目中运行时它正常运行。 NoSuchMethodError是我编写的方法。它不使用任何webtools。我不知道为什么会这样。有关为何出现这种情况的任何见解?该程序也不使用J2EE组件。我偶然在一个网络项目中运行它,它完美地工作。
使用的软件: 1.Eclipse Indigo 3.7 2.jdk 1.7,jre7 3. Tomcat 7
编辑1。:
Exception in thread "main" java.lang.NoSuchMethodError:x.y.opinion.db.SentenceAccumulator.addSentenceForDocuId(ILcom/google/api/translate/Language;)V
at com.x.y.repo.RepoBuilder.processDocument(RepoBuilder.java:350)
at com.x.y.db.DataLoadJob.loadData(DataLoadJob.java:382)
at com.x.y.db.loadDataFromBackEnd.loadData(loadDataFromBackEnd.java:51)
at com.x.y.db.loadDataFromBackEnd.loadBackEnd(loadDataFromBackEnd.java:28)
at sample.main(sample.java:37)
编辑2.: 当我调试程序时,它要求我添加jar文件的源文件。在它下面说
// Compiled from RepoBuilder.java (version 1.6 : 50.0, super bit)
但它仅使用1.7编译。我很确定!
答案 0 :(得分:0)
NoSuchMethodError
。 From the documentation:
如果应用程序试图调用类的指定方法(静态或实例),并且该类不再具有该方法的定义,则抛出该异能。
通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则此错误只能在运行时发生。
确保您在两种环境中都具有相同版本的库。
如果为自己编写的方法抛出错误,则会混合使用不同版本的类。尝试删除所有类文件并进行干净的构建。