2013-08-23 22 views
1

我在尝试将svg文档加载到JSVG面板时看到以下错误。Batik函数调用的不兼容对象参数

Exception occurred in target VM: (class: org/apache/batik/bridge/BridgeContext, method: dispose signature:()V) Incompatible object argument for function call 
java.lang.VerifyError: (class: org/apache/batik/bridge/BridgeContext, method: dispose signature:()V) Incompatible object argument for function call 
    at org.apache.batik.swing.svg.JSVGComponent.createBridgeContext(Unknown Source) 
    at org.apache.batik.swing.svg.JSVGComponent.installSVGDocument(Unknown Source) 
    at org.apache.batik.swing.JSVGCanvas.installSVGDocument(Unknown Source) 
    at org.apache.batik.swing.svg.JSVGComponent$2.run(Unknown Source) 
    at org.apache.batik.swing.svg.JSVGComponent.stopThenRun(Unknown Source) 
    at org.apache.batik.swing.svg.JSVGComponent.setSVGDocument(Unknown Source) 
    at org.netbeans.modules.plantumlnb.SVGImagePreviewPanel.renderSVGFile(SVGImagePreviewPanel.java:48) 
    at org.netbeans.modules.plantumlnb.RenderImageThread$1.run(RenderImageThread.java:56) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:694) 
    at java.awt.EventQueue$3.run(EventQueue.java:692) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

这里是相关的代码。

canvas.setSVGDocument(createSVGDocument(new StringReader(imageContent)));

我不知道我在做什么错在这里。任何帮助表示赞赏。

+0

从堆栈跟踪判断,我们实际上并不需要看到'createSVGDocument()'。 'setSVGDocument()'更有可能是相关的。 (看起来像'setSVGDocument'正在调用'stopThenRun',它调用'run'等) –

+0

感谢您的回复。但是,您的建议是编辑并从SO帖子中删除该呼叫吗? – ShaggyInjun

+0

是的,用'setSVGDocument'代码替换它。看一下堆栈跟踪,看起来你确实正在使用该函数(所以它可能不是'createSVGDocument')。 –

回答

1

我认为这种不兼容性不在于你的应用程序和蜡染之间,而在于蜡染和它所需要的库之间的不兼容性,这些库或者不存在或者存在于不同的版本中。典型的应用程序是xml实用程序库,可能会与其他使用它的软件一起进入您的环境,例如, XML-apis.jar。另一个可能会陷入困境的问题是使用Java版本,这个版本太旧,因为所包含的DOM API类从版本变为版本。

+0

你的回答让我知道我在找什么。似乎Netbeans发布了它自己的'xerces'版本,这与我所包含的内容相冲突。谢谢您的帮助。 – ShaggyInjun