在正常的Java项目中而不是在J2EE项目中发生NoSuchMethodError(Eclipse)

时间:2013-07-02 09:26:29

标签: java eclipse java-ee tomcat7

我编写的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编译。我很确定!

1 个答案:

答案 0 :(得分:0)

当您为一个版本的类编写代码然后使用另一个没有您使用的方法的代码运行它时,会发生

NoSuchMethodErrorFrom the documentation:

  

如果应用程序试图调用类的指定方法(静态或实例),并且该类不再具有该方法的定义,则抛出该异能。

     

通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则此错误只能在运行时发生。

确保您在两种环境中都具有相同版本的库。

如果为自己编写的方法抛出错误,则会混合使用不同版本的类。尝试删除所有类文件并进行干净的构建。