java classcastexception

时间:2010-05-03 09:05:48

标签: java xml

我在将XML文档类型转换为Document对象时遇到问题。 这是一段代码

Document doc=null;
doc = (Document) parser.parse(sourceFile);

对于第2行,它会抛出java classcast异常..

没有类型转换,它显示错误为

Type mismatch: cannot convert from org.w3c.dom.Document to javax.swing.text.Document

我现在如何正确地进行类型转换?任何建议??

3 个答案:

答案 0 :(得分:6)

问题在于,不合格的名称存在冲突。

也就是说,由于您的import语句,非限定名称Document指的是javax.swing.text.Document,但您确实需要org.w3c.dom.Document代替(这就是解析器返回)。

您可以使用完全限定名称来解决此问题:

org.w3c.dom.Document doc = (org.w3c.dom.Document) parser.parse(sourceFile);

或者,您还可以具体import具体Document,如下所示:

import javax.swing.text.*;
import org.w3c.dom.*;
import org.w3c.dom.Document;

//...

Document doc = (Document) parser.parse(sourceFile);

这称为单一类型导入声明JLS 7.5.1),它可用于“隐藏”其他声明。

答案 1 :(得分:2)

这两个接口具有相同的名称,但完全不相关。你不能在它们之间施放 - 它没有意义,因为它们代表完全不同的概念(好的,理论上,你可以有一个显示XML树的Swing组件并使用DOM Document作为它的模型,但我不认为那是什么你有)。

您可能想要做的是获取未解析的XML并在要显示它的swing组件上调用setText(xmlText)

答案 2 :(得分:1)

您的应用程序是否为Swing应用程序?

您可能正在使用IDE,您可以自动组织源文件中的导入。 IDE为javax.swing.text.Document而不是org.w3c.dom.Document添加了导入。这是我在使用Eclipse IDE时经常遇到的事情。

您需要做的事情:从源代码文件的顶部删除此行:

import javax.swing.text.Document;

将其替换为:

import org.w3c.dom.Document;