Java 从org.w3c.dom.Element转换为SVGSVGElement失败

Java 从org.w3c.dom.Element转换为SVGSVGElement失败,java,java-me,svg,Java,Java Me,Svg,说真的,如果我这样投: (SVGSVGElement) (((SVGImage)blabla).getDocument().getDocumentElement()) 它是有效的,但如果我尝试 (SVGSVGElement)doc.getElementById(some_id) 我得到了cast错误,但是getDocumentElement()和getElementById()都返回相同的类型org.w3c.dom.Element,我的全局目标是从文件中加载svg场景中某些图像的X坐标,以便

说真的,如果我这样投:

(SVGSVGElement) (((SVGImage)blabla).getDocument().getDocumentElement())
它是有效的,但如果我尝试

(SVGSVGElement)doc.getElementById(some_id)

我得到了cast错误,但是getDocumentElement()和getElementById()都返回相同的类型
org.w3c.dom.Element
,我的全局目标是从文件中加载svg场景中某些图像的X坐标,以便缩放场景,使该图像适合可见区域。我试图用
((SVGSVGElement)doc.getElementById(some_id)).getBBox().getX()
来实现这一点,但您看到了我得到的结果。

org.w3c.dom.Element
是dom体系结构中最低的接口之一,并且很多类扩展了它,特别是
SVGSVGElement

您需要找出
doc.getElementById(some_id)
中返回的类型,然后根据该信息执行强制转换:

log.debug("Returned class is - " + doc.getElementById(some_id).getClass().getName();
//or
System.out.println("Returned class is - " + doc.getElementById(some_id).getClass().getName();
最简单的方法是直接在调试器中尝试知道类型

我知道,唯一的情况是,这种类型似乎是正确的,但是ClassCastException发生了:

  • 类加载器问题(当来自2个不同库的一个类被加载到2个不同的类加载器中时)
  • AOP代理问题

在这两种情况下,它都返回
com.nokia.mid.impl.isa.dom.svg.cbfsvglocatablelement
,然后请检查我在回答中描述的
cases