Eigenes TableModel - NullPointerException

Status
Nicht offen für weitere Antworten.

quarx

Mitglied
Hi Leute !

Ich habe mir eine Klasse geschrieben die das DefaultTableModel erweitert. In meiner Hauptklasse("MainMenu") erstelle ich ein neues JTable mit meinem neuen TracklistTableModel. Das compilen funktioniert noch, aber beim ausführen bekomme ich folgende Fehlermeldung:

Code:
>java Main
Exception in thread "main" java.lang.NullPointerException
        at dnb.TracklistTableModel.getRowCount(TracklistTableModel.java:17)      <<<<<<<<<<<
        at javax.swing.table.DefaultTableModel.setDataVector(DefaultTableModel.java:194)
        at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:98)

        at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:80)

        at javax.swing.table.DefaultTableModel.<init>(DefaultTableModel.java:60)

        at dnb.TracklistTableModel.<init>(TracklistTableModel.java:11)
        at dnb.MainMenu.<init>(MainMenu.java:26)     <<<<<<<<<<<<<<<
        at Main.main(Main.java:14)
Hier der Ausschnitt des Codes aus "MenuMenu.java":
Code:
package dnb;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import java.io.*;
import java.util.*;
import java.lang.*;

public class MainMenu extends JFrame implements ActionListener {
    
    private ArrayList tracklist = new ArrayList();
    
    public MainMenu() {
        
        String filename = "m:/tracklist.trs";
        getTracks(filename);
              
        .........

        TracklistTableModel myTableModel = new TracklistTableModel();                 //Zeile 26
        JTable table = new JTable();
        myTableModel.setTracklistData(tracklist);
        table.setModel( myTableModel );

        .............
     
    }
}
Und hier noch "TracklistTableModel.java":
Code:
package dnb;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import java.text.*;
import java.util.*;
import java.lang.*;

public class TracklistTableModel extends DefaultTableModel {
    
    private ArrayList data;
    private final String  columnNames[] = { "Rating", "Artist" , "Title" };
    
    public int getRowCount() {
        return data.size();                                                      // Zeile 17
    }
    
    public int getColumnCount() {
        return columnNames.length;
    }
    
    public String getColumnName(int column) {
        return columnNames[column];
    }
    
    public void setTracklistData(ArrayList toset) {
        data = toset;
        fireTableDataChanged();
    }
    
    public Object getValueAt(int row, int col) {
        track value = (track)data.get(row);
        if (columnNames[col].equals("Rating")) return Integer.toString(value.Rating);
        else if (columnNames[col].equals("Artist")) return value.Artist;
        else if (columnNames[col].equals("Title")) return value.Title;
        else return "NOTHING";
    }
}
Warum bekomme ich eine NullPointerException ?

lg
 
Ist Zeile 17 der Hinweis für die Stelle, an der die Exception geworfen wird?
Dann ist vielleicht
Code:
ArrayList data;
noch null, weil noch nicht initialisiert.
Vielleicht fragst Du schon Daten ab
Code:
getRowCount()
ohne der ArrayList vorher einen Wert zugewiesen zu haben.
Code:
setTracklistData(ArrayList toset)
 
Code:
private ArrayList data;
wird scheinbar nirgends initialisiert -> daher noch null -> daher data.size() NullPointer
 
deathbyaclown hat gesagt.:
Code:
private ArrayList data;
wird scheinbar nirgends initialisiert -> daher noch null -> daher data.size() NullPointer

Das heisst ich kann einfach die NullPointerException abfangen, bis sie halt initialisiert wurde oder ?
Nur, ich greif ja zu dem Zeitpunkt auf getRowCount() noch garnicht zu, was soll ich dann returnen ?

thx
 
ich würde das so machen:
Code:
TracklistTableModel myTableModel = new TracklistTableModel(tracklist);                 //Zeile 26
        JTable table = new JTable();
        table.setModel( myTableModel )
und im Model:
Code:
public TracklistTableModel(ArrayList data) {
   this.data = data;
}
dann sollte es gehen !
 
@quarx: Hm, das finde ich nicht so gut.
Besser ist eine Überprüfung auf null
Code:
if(data == null) {
  //tu was
}
 
deathbyaclown hat gesagt.:
ich würde das so machen:
Code:
TracklistTableModel myTableModel = new TracklistTableModel(tracklist);                 //Zeile 26
        JTable table = new JTable();
        table.setModel( myTableModel )
und im Model:
Code:
public TracklistTableModel(ArrayList data) {
   this.data = data;
}
dann sollte es gehen !

Ahja danke, dass schaut gut aus, so werd ichs probieren!

thx an euch beide !
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben