Warum eine ClassCastException?

Maik20

Erfahrenes Mitglied
Kann mir jemand erklären warum ich folgende Fehlermeldung erhalte:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Vector
at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
at csv.model.CSVTableModel.<init>(CSVTableModel.java:45)

Das ist der Code. Hinter der Zeile 45 steht ein Kommentar:

Code:
public class CSVTableModel extends DefaultTableModel {
	
	private static final long serialVersionUID = 1L;

	public CSVTableModel(String file, boolean firstRowIsTitelRow, String delimiter){
		Vector<String> col1 = new Vector<String>();
		Vector<String> dat1 = new Vector<String>();
		
		try {
			File fi = new File(file);
			 
			BufferedReader bufRdr  = new BufferedReader(new FileReader(fi));
			String line = null;
			int row = 0;
			while(((line = bufRdr.readLine()) != null) && row<20){
				StringTokenizer st = new StringTokenizer(line,delimiter);
				int col = 0;
				while (st.hasMoreTokens()){
					String value = st.nextToken();
					if (row==0 && firstRowIsTitelRow){
						col1.add(value);
					}else{
						dat1.add(value);
					}
					col++;
				}
				row++;
			}
			bufRdr.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		setDataVector(dat1, col1); // Das ist Zeile 45. Sowohl dat1 als auch col1 sind vom Typ Vector
	}
}

Danke
 
Der Fehler kommt nicht genau an dieser Stelle, ihr erfolgt nur ein Aufruf.
Interessant wäre der Quellcode zu der in Zeile 45 aufgerufenen Methode.
 
Naja,

der Code in Zeile 45 ist nicht von mir, da müsstest du (ich glaube) Sun fragen ;-)

Wenn ich das richtig verstehe überschreibe ich das DefaultTableModel um meine Daten einzulesen und dieses dann meinem JTable zu übergeben.

Dazu noch eine Idee? Ich stehe wirklich auf dem Schlauch
 
Moin,

diese Methode: setDataVector wäre noch interessant gewesen. Du typisierst deine beiden Vectoren als String. Kann es sein das du sowas in der Art in der Methode setDataVector Versuchst?

Vector data = dat1.get(0);

LG
Chriz
 
Ok, sorry habe das "extends" übersehen ;)
Und du bist dir sicher, dass in den beiden Vectoren etwas drin steht?
 
Der Code indem der Fehler auftritt (Java 5):
Java:
    private void justifyRows(int from, int to) { 
	// Sometimes the DefaultTableModel is subclassed 
	// instead of the AbstractTableModel by mistake. 
	// Set the number of rows for the case when getRowCount 
	// is overridden. 
	dataVector.setSize(getRowCount()); 

        for (int i = from; i < to; i++) { 
	    if (dataVector.elementAt(i) == null) { 
		dataVector.setElementAt(new Vector(), i); 
	    }
	    //hier tritt die Exception auf:
	    ((Vector)dataVector.elementAt(i)).setSize(getColumnCount());   
	}
    }

    private static Vector nonNullVector(Vector v) { 
	return (v != null) ? v : new Vector(); 
    }

    public int getRowCount() {
        return dataVector.size();
    }

    public void setDataVector(Vector dataVector, Vector columnIdentifiers) {
        this.dataVector = nonNullVector(dataVector);
        this.columnIdentifiers = nonNullVector(columnIdentifiers); 
	justifyRows(0, getRowCount()); 
        fireTableStructureChanged();
    }
Müssten im DataVector (col1) nicht nochmals Vectoren sein?
Sonnst klappt das nämlich nicht:
((Vector)dataVector.elementAt(i))
Hier will er den String aus dem Vector in einen Vector casten, was natürlich nicht geht.



PS: @Maik20: wenn du Javacode hast nim die [ java ] code [ /java ] Tags ;)
 
Zuletzt bearbeitet:
Müssten im DataVector (col1) nicht nochmals Vectoren sein?
Sonnst klappt das nämlich nicht:
((Vector)dataVector.elementAt(i))
Hier will er den String aus dem Vector in einen Vector casten, was natürlich nicht geht.



PS: @Maik20: wenn du Javacode hast nim die [ java ] code [ /java ] Tags ;)



Ja genau, laut der JAVA Api müsstest du recht haben.
Der Datavector enthält Vectoren, die jeweils eine Zeile darstellen.
 
Zurück