java.lang.ClassCastException:java.lang.String不能转换为java.util.Vector
我尝试将XML解析数据添加到DefaultTableModel中。 根据文档,DefaultTableModel将向量或对象[]作为参数 但当我使用向量时,我得到了一个例外:java.lang.ClassCastException:java.lang.String不能转换为java.util.Vector,java,user-interface,xpath,vector,xml-parsing,Java,User Interface,Xpath,Vector,Xml Parsing,我尝试将XML解析数据添加到DefaultTableModel中。 根据文档,DefaultTableModel将向量或对象[]作为参数 但当我使用向量时,我得到了一个例外: java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Vector 这是我用来解析并添加到向量中的类 public class PropXMLParsing { static PropXMLParsing insta
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Vector
这是我用来解析并添加到向量中的类
public class PropXMLParsing {
static PropXMLParsing instance = null;
private Vector<String> header = new Vector<String>();
private Vector<String> data = new Vector<String>();
public static PropXMLParsing getInstance() {
if (instance == null) {
instance = new PropXMLParsing();
try {
instance.ParserForObjectTypes();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}
return instance;
}
public void ParserForObjectTypes() throws SAXException, IOException,
ParserConfigurationException {
try {
FileInputStream file = new FileInputStream(new File(
"xmlFiles/CoreDatamodel.xml"));
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document xmlDocument = builder.parse(file);
XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//prop/*";
NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(
xmlDocument, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getFirstChild()
.getNodeValue());
data.addElement(nodeList.item(i).getFirstChild().getNodeValue());
header.addElement(nodeList.item(i).getFirstChild()
.getNodeValue());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
public Vector<String> getHeader() {
return header;
}
public Vector<String> getData() {
return data;
}
}
请帮助我根据,数据必须是
向量
。另外,在DefaultTableModel构造函数参数中,数据和头是向后的。根据,数据必须是向量。此外,您还可以在DefaultTableModel构造函数参数中向后获取数据和标题。Java文档将使用的DefaultTableModel构造函数的状态声明为:
public DefaultTableModel(Vector data,
Vector columnNames)
Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method.
Parameters:
data - the data of the table, a Vector of Vectors of Object values
columnNames - vector containing the names of the new columns
和setDataVector()
接受dataVector(即第一个参数)
作为对象向量的向量
值
因此,在您的例子中,构造函数中的第一个参数(即PropXMLParsing.getInstance().getHeader())
应该是Vector
更新
示例代码
JFrame frame = new JFrame("DemoFrame");
Vector<String> id = new Vector<String>();
id.add("1");
id.add("2");
id.add("3");
Vector<String> name = new Vector<String>();
name.add("A");
name.add("B");
name.add("C");
Vector<Vector<String>> dataVector = new Vector<Vector<String>>();
dataVector.add(id);
dataVector.add(name);
Vector<String> header = new Vector<String>(2);
header.add("ID");
header.add("NAME");
TableModel model = new DefaultTableModel(dataVector,header);
JTable table = new JTable(model);
frame.add(new JScrollPane(table));
frame.setSize(300, 200);
frame.setVisible(true);
JFrame=newjframe(“DemoFrame”);
向量id=新向量();
id.add(“1”);
id.add(“2”);
id.add(“3”);
向量名称=新向量();
名称。添加(“A”);
名称。添加(“B”);
名称。添加(“C”);
向量数据向量=新向量();
添加(id);
dataVector.add(名称);
向量头=新向量(2);
标题。添加(“ID”);
标题。添加(“名称”);
TableModel model=新的DefaultTableModel(数据向量,标题);
JTable table=新的JTable(模型);
frame.add(新的JScrollPane(表));
框架。设置尺寸(300200);
frame.setVisible(true);
如果您的任何数据向量或标题为空,则不会显示DefaultTableModel
的已用构造函数的Java文档状态,如下所示:
public DefaultTableModel(Vector data,
Vector columnNames)
Constructs a DefaultTableModel and initializes the table by passing data and columnNames to the setDataVector method.
Parameters:
data - the data of the table, a Vector of Vectors of Object values
columnNames - vector containing the names of the new columns
和setDataVector()
接受dataVector(即第一个参数)
作为对象向量的向量
值
因此,在您的例子中,构造函数中的第一个参数(即PropXMLParsing.getInstance().getHeader())
应该是Vector
更新
示例代码
JFrame frame = new JFrame("DemoFrame");
Vector<String> id = new Vector<String>();
id.add("1");
id.add("2");
id.add("3");
Vector<String> name = new Vector<String>();
name.add("A");
name.add("B");
name.add("C");
Vector<Vector<String>> dataVector = new Vector<Vector<String>>();
dataVector.add(id);
dataVector.add(name);
Vector<String> header = new Vector<String>(2);
header.add("ID");
header.add("NAME");
TableModel model = new DefaultTableModel(dataVector,header);
JTable table = new JTable(model);
frame.add(new JScrollPane(table));
frame.setSize(300, 200);
frame.setVisible(true);
JFrame=newjframe(“DemoFrame”);
向量id=新向量();
id.add(“1”);
id.add(“2”);
id.add(“3”);
向量名称=新向量();
名称。添加(“A”);
名称。添加(“B”);
名称。添加(“C”);
向量数据向量=新向量();
添加(id);
dataVector.add(名称);
向量头=新向量(2);
标题。添加(“ID”);
标题。添加(“名称”);
TableModel model=新的DefaultTableModel(数据向量,标题);
JTable table=新的JTable(模型);
frame.add(新的JScrollPane(表));
框架。设置尺寸(300200);
frame.setVisible(true);
如果您的任何dataVector或header为空,表将不显示旁注:在问题中添加异常时,最好在抛出异常的位置标记该行。旁注:在问题中添加异常时,最好标记该行,如果我将它更改为一个向量,它将在这一行抱怨:data.addElement(nodeList.item(I).getFirstChild().getNodeValue());假设参数必须是字符串。第一个参数应该是Vector,而不是第二个参数。它解决了异常,但仍然没有在表中显示任何数据。yeh header为null:header:[]。无法正确获取数据。aight.yeh我将模型添加到表中。如果我将其更改为向量,它将在这一行抱怨:data.addElement(nodeList.item(I).getFirstChild().getNodeValue());假设参数必须是字符串。第一个参数应该是Vector,而不是第二个参数。它解决了异常,但仍然没有在表中显示任何数据。yeh header为null:header:[]。无法正确获取数据。是的,我把模型加到桌子上了。