JTable verursacht NullPointerException.Ratlos.

JavaMeetsBlueJ

Bekanntes Mitglied
Hallo liebes Forum, ich bastel gerade an nem Programm für das ich eine Jable benötige. Eclipse meckert auch nirgends nur ich bekomme eine NullPointerException. Hier mal der Code:
Java:
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;


public class Tabellenverwaltung implements TableModel{

	TableModelListener listener;
	
	Kurs kurse[] = new Kurs[Kurs.objectCounter];
	
	public Tabellenverwaltung(){
	
		kurse[0] =  new Kurs("DEFAULT", "DEFAULT", "DEFAULT", "DEFAULT", "DEFAULT", "DEFAULT");
		
	}
	
	@Override
	public void addTableModelListener(TableModelListener listener) {
		this.listener = listener;
		
	}

	@Override
	public Class<?> getColumnClass(int arg0) {
		
		return String.class;
	}

	@Override
	public int getColumnCount() {
		
		return 6;
	}

	@Override
	public String getColumnName(int columIndex) {
		
		switch(columIndex)
		{
		case 0: return "Bezeichnung";
		
		case 1: return "Lehrer";
		
		case 2: return "Klasse";
		
		case 3: return "Fach";
		
		case 4: return "Status";
		
		default: return "Vertretung";
			
		}
		
	}

	@Override
	public int getRowCount() {
		
		return kurse.length;
	}

	@Override
	public Object getValueAt(int rowIndex, int columIndex) {
		switch(columIndex)
		{
		case 0: return kurse[rowIndex].getBezeichnung();
		
		case 1: return kurse[rowIndex].getLehrer(); 
		
		case 2: return kurse[rowIndex].getKlasse();
		
		case 3: return kurse[rowIndex].getFach();
		
		case 4: return kurse[rowIndex].getStatus();
		
		default: return kurse[rowIndex].getVertretung();
		}
		
		
	}

	@Override
	public boolean isCellEditable(int rowIndex, int columIndex) {
		
		return false;
	}

	@Override
	public void removeTableModelListener(TableModelListener listener) {
		listener =  null;
		
	}

	@Override
	public void setValueAt(Object arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub
		
	}

}

Bei
Code:
public Object getValueAt(int rowIndex, int columIndex)
bekomme ich die Exception bei
Code:
case: 0
Wo ist da denn ein Problem? RowIndex == 0 entspricht doch dem ersten Element oder nicht?

hier mal der komplette Fehler:
Code:
11
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Tabellenverwaltung.getValueAt(Tabellenverwaltung.java:66)
	at javax.swing.JTable.getValueAt(Unknown Source)
	at javax.swing.JTable.prepareRenderer(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
	at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
	at javax.swing.plaf.ComponentUI.update(Unknown Source)
	at javax.swing.JComponent.paintComponent(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JViewport.paint(Unknown Source)
	at javax.swing.JComponent.paintChildren(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
	at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent._paintImmediately(Unknown Source)
	at javax.swing.JComponent.paintImmediately(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.access$700(Unknown Source)
	at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(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)

Gruß
 
[OT]Problem gelöst!!![/OT]
Code:
getRowCount
darf nicht
Code:
kurse.length
sein. Die Tabelle soll dynamisch sein. In einer Liste werden zu bearbeitende Kurse ausgewählt und in der Tabelle dargestellt als Übersicht. Jetzt möchte ich so viel Zeilen haben, wie Einträge in dem "PufferArray" kurse vorhanden sind.Dieses speichert nämlich die referenzen von denen in der Liste ausgewählten Kursen. Benötige ich dafür eine ArrayList?

Gruß
 
Klingt zumindest sinnvoller als der Array, mit dem statischen "Kurs.objectCounter" :autsch:

Also
private List<Kurs> kurse = new ArrayList<Kurs>();

Vermutlich solltest du aber ohnehin von AbstractTableModel erben. Das implementiert auch die Listener-Verwaltung. Und zwar richtig 😉
 
Für den Listener gilt in diesem Fall das Highlander-Prinzip: Es kann nur einen geben. Es sollte aber auch möglich sein, mehrere Listener hinzuzufügen.

AbstractTableModel ist ja genau dafür da, um davon zu erben. Natürlich kann man die Listener-Sache auch selbst machen, aber ... "lernen" tut man damit nicht soo viel. Außer vielleicht, warum eine CopyOnWriteArrayList machmal praktisch ist 😉
 
Also das böse static gewurschtel habe ich jetzt durch eine ArrayList ersetzt. Der Ansatz ist aber ok oder?

[EDIT]Das funktioniert ja perfekt mit der ArrayList. Dann brauch ich einfach nur kurse.size() benutzen und die Tabelle ist dynamisch und ohne NulPointerException. Ich hatte die Dinger immer vernachlässigt weil ich dachte dass ich sowas nicht brauchen würde😉[/EDIT]
Gruß
 
Zuletzt bearbeitet:

Zurück
Oben