2014-01-21 97 views
0

我有我想要添加到DefaultTableModel中的XML解析數據。 根據文檔,DefaultTableModel將Vector或Object []作爲參數。java.lang.ClassCastException:java.lang.String不能轉換爲java.util.Vector

但是當我使用一個Vector我得到這個異常:

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; 
    } 

} 

而這最後一行代碼是它拋出異常。這是從我的GUI類:

model = new DefaultTableModel(PropXMLParsing.getInstance().getHeader(), 
       PropXMLParsing.getInstance().getData()); 

     table = new JTable(model); 

幫助我,請

+0

邊注:當添加一個例外,你的問題,這是很好的紀念該線路在哪裏被拋出。 – Fildor

回答

1

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(i.e.first arguement)Vector of vectors of Object

所以在構造函數中(i.e. PropXMLParsing.getInstance().getHeader())你的情況首先arguement應該Vector<Vector<String>>

UPDATE

示例代碼

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); 

如果您的任何dataVector中或頭的爲空表將不會顯示

+0

如果我將它更改爲Vector ,它會在此行上發出抱怨:data.addElement(nodeList.item(i).getFirstChild()。getNodeValue());並說這個論據必須是一個字符串。 – Sembrano

+0

你的第一個論據應該是矢量>不是第二個 – Prateek

+0

Aight它解決了這個異常,但沒有在表格中顯示任何數據。 – Sembrano

相關問題