2013-07-02 25 views
0

我编写的Java程序在正常Java项目中运行时发出NoSuchMethodError,但在J2EE Web项目中运行时运行正常。 NoSuchMethodError是由我写的一个方法。它不使用任何webtools。我不知道为什么会发生这种情况。有关这种情况发生的原因此外,该程序不使用J2EE组件。偶然我把它运行在一个web项目中,并且完美运行。使用NoSuchMethodError发生在普通Java项目中,而不是在J2EE项目中(Eclipse)

软件: 1.Eclipse靛蓝3.7 2.jdk 1.7,jre7 3. Tomcat的7

EDIT 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) 

EDIT 2.: 当调试程序,它要求我添加jar文件的源文件。下面是说

// Compiled from RepoBuilder.java (version 1.6 : 50.0, super bit) 

但它只使用1.7编译。我真的该死!

+0

发布完整的堆栈跟踪。 – NINCOMPOOP

+0

此外,导致问题的代码可能会有用。 –

+0

添加依赖jar文件 –

回答

0

NoSuchMethodError发生在为一个类的某个版本编写代码,然后将其与另一个没有使用该方法的代码一起运行时发生。 From the documentation:

如果应用程序尝试调用某个类的指定方法(静态或实例)并且该类不再具有该方法的定义,则会抛出该错误。

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

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

如果您为自己编写的方法抛出错误,那么您将拥有来自不同构建的类的混合。尝试删除所有类文件并进行干净的构建。

+0

两者都使用相同的jre,相同的构建和运行时路径。我三重检查 – user2500875

+0

如果他们是你不会得到这个错误;从某处,不知何故,这个特定类的不同版本正在被加载。 – Joni