Swing jTable indexOutOfBounds unkontrollierbar

Oldboii

Mitglied
Hi Leute,

bin jetzt in der Testphase von meinem Programm noch auf einen seltsamen Bug gestoßen.
Über ein MenuItem z.B. soll aus einem JInternalFrame - aus dem jTable der Wert aus einer Zeile ausgelesen werden.
Jetzt kommt es natürlich vor, das gar keine Zeile ausgewählt ist und trotzdem die Methode aufgerufen wird. Um alles unter Kontrolle zu halten, habe ich natürlich einen try catch block mit einem JOptionPane(zur Warnung) drumrum gebaut. Soweit so gut, alles bestens.
Jetzt habe ich ein zweites JInternalFrame, welches auch über ein MenuItem angesprochen werden kann, ebenfalls mit jTable etc. und die Methoden funktionieren bis ins Detail genauso wie im ersten Fall. Nur hier wird die Exception nicht abgefangen, das JOptionPane kommt als Warnung aber in der Konsole bekomme ich 10-20 mal IndexOutofBoundsException. Das schlimmste dabei ist, das er nach dem catch die Methode sogar weiter ausführt statt anzuhalten.
Jetzt ein paar Codefragmente:

Die funktionierende Methode:
Java:
protected void toolEdit() {
		try {
			TableSelect();
		} catch (Exception e1) {
			JOptionPane.showMessageDialog(null,
					"Sie haben offenbar kein \n"
							+ "Gerät zur Bearbeitung selektiert?!");
			Thread
					.setDefaultUncaughtExceptionHandler(new errHandler());
		}
//... Fenster wird aufgerufen etc.
}

Die TableSelect Methode:
Java:
public void TableSelect() {
		gmng.TableSelect(); //gmng ist mein JInternalFrame
		nummer = gmng.getNummer(); //hier wird die Variable aus dem jTable geschnappt
	}

Die TableSelect Methode aus dem JInternalFrame:
Java:
public void TableSelect() {
		nummer = jTableTools.getValueAt(jTableTools.getSelectedRow(), 0)
				.toString();
	}

Die kaputten Methoden:
Java:
protected void EditPart(){
		try {
			TableSelectParts();
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null,
					"Sie haben offenbar kein \n"
							+ "Ersatzteil zur Bearbeitung selektiert?!");
			Thread
					.setDefaultUncaughtExceptionHandler(new errHandler());
		}
		// passiert genau das gleiche - ein Fenster wird aufgerufen
	}

TableSelectParts Methode:
Java:
public void TableSelectParts(){
		pmg.TablePartSelect(); //Mein anderes JInternalFrame
		nummer = pmg.getPartnummer();
	}

Der eigentliche TableSelect:
Java:
public void TablePartSelect() {
					partnummer = jTableParts.getValueAt(jTableParts.getSelectedRow(), 0)
							.toString();
	}

Übersehe ich irgendeine Kleinigkeit?? Habe gestern 5 Stunden lang rumprobiert und mir jede Kleinigkeit angesehen - finde aber keinen Unterschied bzw. Grund für den Fehler. ???:L
Kann ich dem allgemein irgendwie entgehen? Kann man z.B. irgendwie prüfen ob überhaupt irgendetwas im jTable selektiert wurde um die Methoden erst gar nicht auszuführen?

Danke schonmal, falls ihr den Nerv hattet das alles durchzulesen. :toll:
 
Kann man z.B. irgendwie prüfen ob überhaupt irgendetwas im jTable selektiert wurde um die Methoden erst gar nicht auszuführen?

Naja rufe in deiner TableSelect-Methode(Methoden fangen mit einem Kleinbuchstaben an!) halt getSelectedRow() nicht direkt in getValueAt auf, sondenr evtl. in einer Zeile vorher:
int selctedRow = jTableTools.getSelectedRow();
Dann kannst du anschließend eine Abfrage machen if(selectedRow!=-1) getValueAt(selectedRow...)

so in der Art, dann kann der ganze Kram mit dem Fangen weggelassen werden!
 
Danke eRaaaa

Musste zwar bisschen rumprobieren und das ganze ist jetzt bisschen komplizierter ausgefallen, aber das war die Lösung.

PS: Ja meine programmier Konventionen sind mir ein bisschen aus dem Ruder gelaufen 😳
 

Zurück
Oben