/ / Probleme beim Versuch, eine Datei zu lesen und deren Werte zu einem JFrame - java, swt hinzuzufügen

Probleme beim Versuch, eine Datei zu lesen und ihre Werte einem JFrame hinzuzufügen - java, swt

Ich erhalte diese Fehlermeldung, wenn ich versuche, einige Werte aus Dateiarchiven hinzuzufügen:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0

Das ist mein Code:

    FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);

while (br.ready()) {

line = br.readLine();
st = new StringTokenizer(line, "|");

JTable table = new JTable();
table.setModel(new DefaultTableModel(new Object[0][], new String[] { "TEST", "TEST2","TEST3"}));
chargeTable = (DefaultTableModel)table.getModel();

while (st.hasMoreElements()) {
rowData.add(st.nextElement());
}

if (!rowData.isEmpty()) {
tabelaCarregada.addRow(rowData);
rowData.clear();
}

}

br.close();
fr.close();

JFrame jd;
jd = new Tabela(chargeTable);
jd.pack();
jd.setVisible(true);

Ich lese nur eine Datei, dann versuche ich, jede Zeile aus der Datei einer Tabelle hinzuzufügen und sie in einen JFrame zu setzen.

In der Datei ist so:

beispiel1 | beispiel2 | beispiel3

beispiel1 | beispiel2 | beispiel3

beispiel1 | beispiel2 | beispiel3

beispiel1 | beispiel2 | beispiel3

beispiel1 | beispiel2 | beispiel3

Was mache ich falsch? Dieser Fehler ist verwirrend für mich.

Danke für die Hilfe.

AKTUALISIEREN:

    FileReader fr = new FileReader(arq);

BufferedReader br = new BufferedReader(fr);
String line;
StringTokenizer st;
Vector<Object> rowData = new Vector<Object>();

chargeTable = new DefaultTableModel(new Object[0][], new String[] {"Teste1", "Teste2"});

while (br.ready()) {
line = br.readLine();
st = new StringTokenizer(line, "|");

while (st.hasMoreElements()) {
rowData.add(st.nextElement());
}

if (!rowData.isEmpty()) {
chargeTable.addRow(rowData);
rowData.clear();
}

}

JTable table = new JTable();
table.setModel(chargeTable);

br.close();
fr.close();

JScrollPane sp = new JScrollPane();
sp.add(table);

JFrame jd = new JFrame();
jd.add(sp);
jd.pack();
jd.setVisible(true);

Antworten:

2 für die Antwort № 1
  1. Sie sollten ein DefaultTableModel erstellen, bevor Sie mit dem Lesen Ihrer Daten beginnen (dh außerhalb der while-Schleife). Das Modell enthält nur die Spaltennamen.
  2. Dann erstellen Sie für jede Datenzeile, die Sie aus der Datei lesen, einen Vektor und fügen jedes Token vom Tokenizer zum Vektor hinzu.
  3. Dann fügen Sie den Vector zum DefaultTableModel hinzu
  4. Wenn Sie die Verarbeitung aller Datenzeilen in der Datei abgeschlossen haben, erstellen Sie die JTable mit dem DefaultTableModel.
  5. Sie fügen die JTable zu einem JScrollPane hinzu und fügen die Bildlauffläche zum Frame hinzu.

Bearbeiten:

  1. Es gibt einen Konstruktor, der nur die Spaltennamen (mit einer Zeilenanzahl von 0) angibt.

  2. Sie müssen für jede Zeile, die Sie dem Modell hinzufügen, einen neuen Zeilenvektor erstellen.

  3. Verwenden Sie keine clear () -Methode, da dadurch die gerade hinzugefügten Daten entfernt werden.

  4. Sie können die Tabelle nicht der Bildlaufleiste hinzufügen. Sie fügen die Tabelle dem Ansichtsbereich der Bildlauffläche hinzu. Die einfachste Möglichkeit besteht darin, die Bildlauffläche zu erstellen. JScrollPane scrollPane = new JScrollPane(table);