【问题标题】:NoSuchMethodError occuring in normal java project and not in J2EE project ( Eclipse)NoSuchMethodError 发生在普通 java 项目中而不是在 J2EE 项目中(Eclipse)
【发布时间】:2013-07-02 09:26:29
【问题描述】:

我编写的 Java 程序在普通 Java 项目中运行时会出现 NoSuchMethodError,但在 J2EE Web 项目中运行时却可以正常运行。 NoSuchMethodError 在我编写的方法上。它不使用任何网络工具。我不知道为什么会这样。关于为什么会发生这种情况的任何见解?此外,该程序不使用 J2EE 组件。偶然我在一个网络项目中运行它并且它运行良好。

使用的软件: 1.Eclipse靛蓝3.7 2.jdk 1.7,jre7 3. 雄猫 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 编译。我很确定!

【问题讨论】:

  • 发布完整的堆栈跟踪。
  • 导致问题的代码也可能有用。
  • 添加依赖的jar文件
  • 添加了堆栈跟踪。 jar 文件全部添加。它在 Web 项目中完美运行,但在普通项目中却没有。
  • 请发布完整正确的堆栈跟踪。您发布的堆栈跟踪不正确且毫无意义。

标签: java eclipse jakarta-ee tomcat7


【解决方案1】:

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

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

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

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

如果为您自己编写的方法引发错误,则说明您混合了来自不同版本的类。尝试删除所有类文件并进行干净的构建。

【讨论】:

  • 两者都使用相同的 jre、相同的构建和运行时路径。我检查了三次
  • 如果他们是你就不会得到这个错误;从某个地方,不知何故,正在加载这个特定类的不同版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2021-01-10
相关资源
最近更新 更多