G
Guest
Gast
Hallo an alle!
Ich programmier grad an einem Autoverwaltungsprogramm (is nur zum Spass um meine Fähigkeiten in Java zu erweitern *g*).
Hab nun folgendes Problem:
Wie aus der Klasse Datenbank.java zu erkenne ist, steuert sie das ein- und auslesen der "Datenbank" (eine Textdatei mit der Endung avd; momentan funktioniert nur das auslesen).
Momentan liest sie nur aus der vorhandenen Datei versuch.avd die Daten aus.
In dem Fenster (Hauptfenster.java) erzeuge ich einen JTable und will nun, dass gleich am Start die Datenbak eingelsen und dargestellt wird.
Jetzt meine Frage: Warum bekomme ich diese Fehlermeldung, wenn ich es ausführe?
java.lang.ClassCastException
at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
at javax.swing.table.DefaultTableModel.<init>(Unknown Source)
at javax.swing.JTable.<init>(Unknown Source)
at Ausprobiertes.AutoVerwaltung.HauptFenster.<init>(HauptFenster.java:53)
at Ausprobiertes.AutoVerwaltung.AutoVerwaltung$1.run(AutoVerwaltung.java:27)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Vielen Dank im Voraus
Ich programmier grad an einem Autoverwaltungsprogramm (is nur zum Spass um meine Fähigkeiten in Java zu erweitern *g*).
Hab nun folgendes Problem:
Wie aus der Klasse Datenbank.java zu erkenne ist, steuert sie das ein- und auslesen der "Datenbank" (eine Textdatei mit der Endung avd; momentan funktioniert nur das auslesen).
Momentan liest sie nur aus der vorhandenen Datei versuch.avd die Daten aus.
Code:
public class Datenbank {
/** Liest die DB ein und speichert sie in einem Vektor */
public Vector liesEin() {
String line;
Vector db = new Vector();
try {
LineNumberReader reader = new LineNumberReader(
new FileReader( "C:\\versuch.avd") );
while ( ( line = reader.readLine() ) != null ) {
/* Wie ich die einzelnen Strings hohle:
* ich bestimme die einzelnen Kategorien (Marke, Modell etc.), hohle mir deren Index (= Position,
* wo dieses Wort beginnt), zähle die Anzahl der Buchstaben plus den ":" hinzu (also 5 + 1 bei "Marke");
* bin somit am Anfang des gewünschten Eintrages; lese diesen bis ";" (= markiert das Ende des Eintrages)
* und speichere ihn in den Vektor db
*/
StringBuffer buffer = new StringBuffer(line);
int markeIndex = buffer.indexOf("Marke:")+6;
int modellIndex = buffer.indexOf("Modell:")+7;
int bjIndex = buffer.indexOf("Baujahr:")+8;
int psIndex = buffer.indexOf("PS:")+3;
String marke = buffer.substring( (markeIndex), buffer.indexOf(";", markeIndex) );
String modell = buffer.substring( (modellIndex), buffer.indexOf(";", modellIndex) );
String bj = buffer.substring( (bjIndex), (bjIndex+4) ); /*hier nicht wie oben da es nur
*4-stellige Jahreszahlen gibt */
String ps = buffer.substring( (psIndex), buffer.indexOf(";", psIndex) );
db.add(marke);
db.add(modell);
db.add(bj);
db.add(ps);
}
reader.close();
}
catch (IOException e) {
System.out.println("\tFehler beim Lesen der Datei!\n");
e.printStackTrace();
}
return db;
}
}
In dem Fenster (Hauptfenster.java) erzeuge ich einen JTable und will nun, dass gleich am Start die Datenbak eingelsen und dargestellt wird.
Code:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class HauptFenster extends JFrame {
public static JTable liste;
public static JButton eintragBearbeiten;
public static JButton eintragLöschen;
public HauptFenster() {
Container cp = getContentPane();
//die Liste zum Anzeigen der Einträge
Vector spaltenNamen = new Vector();
spaltenNamen.add("Marke");
spaltenNamen.add("Modell");
spaltenNamen.add("Baujahr");
spaltenNamen.add("PS");
Datenbank db = new Datenbank();
Vector daten = db.liesEin();
liste = new JTable(daten, spaltenNamen);
liste.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
JScrollPane sp = new JScrollPane(liste);
cp.add(sp, BorderLayout.CENTER);
usw.
Jetzt meine Frage: Warum bekomme ich diese Fehlermeldung, wenn ich es ausführe?
java.lang.ClassCastException
at javax.swing.table.DefaultTableModel.justifyRows(Unknown Source)
at javax.swing.table.DefaultTableModel.setDataVector(Unknown Source)
at javax.swing.table.DefaultTableModel.<init>(Unknown Source)
at javax.swing.JTable.<init>(Unknown Source)
at Ausprobiertes.AutoVerwaltung.HauptFenster.<init>(HauptFenster.java:53)
at Ausprobiertes.AutoVerwaltung.AutoVerwaltung$1.run(AutoVerwaltung.java:27)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Vielen Dank im Voraus