error在java里,如何处理Java中的LinkageError?

小编典典

在经典情况下,LinkageError是您将得到的,在经典情况下,您有一个以上的类加载器加载了一个类C,并且这些类在同一代码(比较,强制转换等)中一起使用。相同的Class名称或是否从相同的jar加载都没有关系-

如果从另一个classloader加载,则一个classloader的Class始终被视为另一个Class。

消息(这些年来已大大改进)说:

Exception in thread "AWT-EventQueue-0" java.lang.LinkageError:

loader constraint violation in interface itable initialization:

when resolving method "org.apache.batik.dom.svg.SVGOMDocument.createAttribute(Ljava/lang/String;)Lorg/w3c/dom/Attr;"

the class loader (instance of org/java/plugin/standard/StandardPluginClassLoader)

of the current class, org/apache/batik/dom/svg/SVGOMDocument,

and the class loader (instance of ) for interface org/w3c/dom/Document

have different Class objects for the type org/w3c/dom/Attr used in the signature

因此,这里的问题在于解析SVGOMDocument.createAttribute()方法,该方法使用org.w3c.dom.Attr(标准DOM库的一部分)。但是,与Batik一起加载的Attr版本是从与传递给该方法的Attr实例不同的类加载器加载的。

您会看到Batik的版本似乎是从Java插件加载的。并且您的文件是从“”加载的,“”很有可能是内置的JVM加载程序之一(引导类路径,ESOM或类路径)。

三种杰出的类加载器模型是:

委派(JDK中的默认值-问父母,然后问我)

授权后(常见于插件,Servlet和需要隔离的地方-问我,然后问父母)

同级(在OSGi,Eclipse等依赖模型中很常见)

我不知道JPF类加载器使用什么委派策略,但是关键是您希望加载dom库的一个版本,并且每个人都希望从同一位置获取该类。这可能意味着将其从类路径中删除并作为插件加载,或者阻止Batik加载它或其他东西。

2020-06-02

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值