提问者:小点点

Java6运行时不覆盖从内部调用的类。jar依赖


我有一个具有不同类和包作为依赖项的项目。请注意,下面写的所有内容都发生在一个项目中。

我有一个类,它在某个时候运行代码getDiagramPanel(). set关系绘画顺序(新比较器(){

getDiagramPanel()DjtSheet. class调用方法,该方法位于依赖项中。jar-file。此方法返回DjtDiagramPanel对象。我还有一个DjtDiagramPanel.java文件,它应该覆盖包中的文件,并包含方法设置关系绘画顺序()

在Java7中,这工作得很好。它正确地从依赖项调用方法,该方法以类的格式返回对象,该类覆盖了依赖包中的面板类。

然而,在Java6中,将返回依赖包中的panelclass,而不是我的项目中的panelclass。

java. lang.NoSuchControlodError:com.dlsc.djt.gantt.DjtDiagramPanel.set关系绘画顺序(Ljava/util/比较器;)V

请注意,此消息发生在运行时!编译项目不会出错。

我该如何解决这个问题?


共1个答案

匿名用户

这个问题肯定意味着你在类路径上有问题。我想问题是类DjtDiagramPanel是重复的,你有两个不同的veraion:一个有方法set关系绘画顺序,第二个没有。显然你编译代码反对“好”版本,运行反对“坏”版本。

当这种情况发生时,您可能可以通过处理eclipse项目属性中的依赖关系顺序来更改类加载的顺序,但它稍后会失败(在生产环境中)。因此,您应该找到重复的根本原因。

首先找到同一个类的这2个版本。然后找出坏版本是如何到达您的类路径的。它通常是因为第3方依赖关系而发生的。如果您使用的是maven,您可以使用依赖插件来查找根本原因并使用标签“排除”禁用它。