我有一个不同的类和包作为依赖项的项目。请注意,下面写的所有内容都发生在一个项目中。
我有一个类,在某些时候运行代码getDiagramPanel().setRelationsPaintOrder(new Comparator() {
。
getDiagramPanel()
从DjtSheet.class
调用方法,该方法位于依赖项.jar文件中。此方法返回DjtDiagramPanel
对象。我还有一个DjtDiagramPanel.java
文件,它应该覆盖包中的文件并包含方法setRelationsPaintOrder()
。
在Java 7中,这很好用。它从依赖项中正确调用该方法,该方法以类的格式返回对象,该类覆盖依赖包中的panelclass。
然而,在Java 6中,返回依赖包中的panelclass而不是我项目中的panelclass。
java.lang.NoSuchMethodError: com.dlsc.djt.gantt.DjtDiagramPanel.setRelationsPaintOrder(Ljava / UTIL /比较器;)V
请注意,此消息在运行时发生!编译项目没有错误。
我该如何解决这个问题?
答案 0 :(得分:0)
这个问题肯定意味着您在类路径中遇到问题。我想问题是类DjtDiagramPanel
是重复的,你有两种不同的版本:一种是方法setRelationsPaintOrder
,另一种是方法{{1}}。显然,您针对“好”版本编译代码并针对“坏”版本运行。
当发生这种情况时,您可以通过在eclipse的项目属性中播放依赖项的顺序来更改类加载的顺序,但它稍后会失败(在生产时)。因此,您应该找到复制的根本原因。
首先找到同一类的这两个版本。然后找出坏版本如何到达你的类路径。它通常是因为第三方依赖性而发生的。如果你正在使用maven,你可以使用依赖插件找到根本原因并使用标记“排除”禁用它。