Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.ClassCastException:java.lang.String不能转换为java.util.Vector_Java_User Interface_Xpath_Vector_Xml Parsing - Fatal编程技术网

java.lang.ClassCastException:java.lang.String不能转换为java.util.Vector

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

我尝试将XML解析数据添加到DefaultTableModel中。 根据文档,DefaultTableModel将向量或对象[]作为参数

但当我使用向量时,我得到了一个例外:

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:[]。无法正确获取数据。是的,我把模型加到桌子上了。