2010-05-03 49 views
1

我有在转换的XML文档类型到文档对象的问题.. 这是该线2,它抛出的java classcast异常的代码段的java classcast例外

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

..

没有typecast它显示错误为

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

我现在怎样才能正确地转换类型?有什么建议么??

回答

6

问题是在非限定名称中存在碰撞。

也就是说,当你import语句的结果,不合格的名称Documentjavax.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),它可以用来“影”其他声明。

+0

事实上:

import javax.swing.text.Document; 

将其替换。检查您的进口:) – extraneon 2010-05-03 09:11:37

+0

嗨它仍然显示相同的异常:( – shil 2010-05-03 09:46:59

+0

@shil:你可以限定你自己的声明“你好我有转换XML文档类型到'文档'对象的问题。” - 哪个'文档'你是否在这里谈论?因为如果它是'javax.swing.text.Document',那么不幸的是,你不能转换它,你必须做一个更精细的转换,这个转换由库(而不是Java语言)来支持。看到Michael的回答 – polygenelubricants 2010-05-03 09:53:11

2

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

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

+0

+1,事实证明这是OP打算做的毕竟。你可能想从这里接管。 – polygenelubricants 2010-05-03 10:59:14

1

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

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

你要做的:删除此行从源代码文件的顶部:

import org.w3c.dom.Document; 
+0

Jesper:'import'不是问题:OP实际上想要以某种方式将w3c'Document'转换为Swing'Document'。 – polygenelubricants 2010-05-03 13:05:18

+0

好的。那么,这当然不容易,因为'org.w3c.dom.Document'和'javax.swing.text.Document'是两个完全不同的东西,即使它们都被称为'Document'。 – Jesper 2010-05-03 18:47:50