# Eclipse, Ursprung einer Exception finden



## Guest (16. Apr 2007)

Servus,

ich hab bei meinem Programm atm zwei Exceptions. Jedoch bieten mir diese keinerlei Information darüber welcher Befehl denn zuletzt ausgeführt wurde bevor die Exception auftrat. Habe ich hier in Eclipse irgendeine Möglichkeit um selbiges herauszufinden?

Hier die Exceptions:


```
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 5 >= 5
	at java.util.Vector.elementAt(Unknown Source)
	at javax.swing.table.DefaultTableColumnModel.getColumn(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.paintWithOffscreenBuffer(Unknown Source)
	at javax.swing.JComponent.paintDoubleBuffered(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.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
	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)

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String 
   at javax.swing.JTable$BooleanRenderer.getTableCellRendererComponent(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.paintWithOffscreenBuffer(Unknown Source) 
   at javax.swing.JComponent.paintDoubleBuffered(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.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source) 
   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)
```


----------



## daily (16. Apr 2007)

Ich nochmal (war vorhin irgendwie nimmer eingeloggt..)

Mir ist natürlich klar dass ich in Einzelschritten durchgehen könnte. Allerdings tritt der Fehler nur sporadisch (so ca. jeden 20. bis 30. Programmstart auf. Und das is dann doch mehr als müßig.


----------



## AlArenal (16. Apr 2007)

1. Es sieht so aus als hättest du Eclipse oder wenigstens das Projekt so konfiguriert, dass keine Debug-Informationen in die .class-Dateien einkompiliert werden. Das ist natürlich schwer fahrlässig, denn "unknown source" hilft einem nicht weiter.

2. Dennoch braucht man nicht viel hellseherische Kräfte um gezielt vermuten zu können, dass du mit deiner JTable, genauer mit dessen Model, Schindluder treibst.

3. Behebe Punkt 1, reproduziere die Fehler und poste sie mit den angegeben Codestellen.


----------



## daily (16. Apr 2007)

Hmm also hab Eclipse bisher immer in den Standardeinstellungen betrieben. Das einzigste was ich verändert hab is das Compilerlevel. Wo schalt ich diese Debuggergeschichte denn ein?

Edit: Wenn du das beim selben reiter wie dem comilerlevel unten meinst: Da sind alle Häkchen gesetzt.


----------



## AlArenal (16. Apr 2007)

Ah... *kaffeeeschlürf** Moment! *wachwerd*

Die Exceptions selber kommen ja aus Standard Java Klassen. Da ist "natürlich" kein Debug-Code drin. Da bleibt dir nur über den Fehler genauer zu untersuchen, reproduzierbar zu machen und im Debugger nachzuvollziehen wann und warum er auftritt.

Vermutlich änderst du zwischendurch ein Model ohne die Listener ordnungsgemäß zu informeiren und/oder befüllst es falsch.


----------



## daily (16. Apr 2007)

Hajo, ich wühl dann mal im Code. Ich meld mich wenn ich was gefunden hab.

Aber ich finds dennoch bescheuert dass eclipse nicht dazu in der Lage ist welcher Befehl den Fehler denn verursacht hat. Irgendwo hat das Übel ja seinen Anfang genommen.


----------



## schalentier (16. Apr 2007)

Ich wuerd vermuten, du aenders das Model einer JTabel, waehrend AWT mithilfe dieses Models am Zeichnen ist. (bei der ersten Exception: neues Element zur Tabelle hinzu, bei der zweiten: neue Spalte hinzu/weg/Typ geaendert). Irgendwie sowas.


----------



## AlArenal (16. Apr 2007)

daily hat gesagt.:
			
		

> Aber ich finds dennoch bescheuert dass eclipse nicht dazu in der Lage ist welcher Befehl den Fehler denn verursacht hat. Irgendwo hat das Übel ja seinen Anfang genommen.



Wenn keine Debug-Infos in den kompilierten Klassen sind (und so ist das im JRE nunmal), dann ist daran nicht Eclipse schuld. Überhaupt kann Eclipse ja nichts dafür, wenn du Bugs einbaust, die sich erst in externem Code auswirken.


----------



## daily (16. Apr 2007)

AlArenal hat gesagt.:
			
		

> daily hat gesagt.:
> 
> 
> 
> ...



Das ist zwar durchaus richtig. Aber wenn ich einen Fehler suche gehe ich im normalfall hin und führe das Programm in Einzelschritten aus. Dadurch weis ich (im Regelfall) bei welcher Anweisung das Problem verursacht wird.

Nun müsste es doch rein technisch recht simpel machbar sein Eclipse bzw. dem Debugger zu sagen: Geh nu bitte mal das Programm in Einzelschritten durch und falls eine Exception auftritt merkst du dir welche Zeile im internen Code denn zuletzt funktionert hat und gibst mir Informationen hieraus aus. Aber dies sind eher Verebesserungsanregungen und gehören wohl nicht hierher.


----------



## Roar (16. Apr 2007)

setz einen exception breakpoint (falls es sowasgibt) oder einen breakpoint wo die exception fliegt (   at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source) vorausgesetzt du bindest vorher die jdk klassen statt den jre klassen ein) und stell den debugger so ein, dass er bei nem breakpoint alle threads anhält. dann schau dir den stacktrace deines main threads oder deinen anderen threads an dann stößt du auf den fehler.


----------



## AlArenal (16. Apr 2007)

Ist sowieso viel angenehmer das JDK mit Eclipse zu verwneden, als nur das JRE, gerade wenn man zum Debuggen oder aus Neugier mal in den Code der JFC schauen möchte.

Ist also mehr ein Bedienungsproblem / Problem fehlenden Hintergrundwissens und keines fehlender Funktionalität in Eclipse. Wenn man weiß wie, kann Eclipse auch Kaffee kochen und Krümel aus der Tastatur saugen 

P.S.:
Jaja, man kann auch das JRE nehmen und parallel die Sourcen von Hand runterladen und in Eclipse verdengeln..


----------



## daily (16. Apr 2007)

Das mit dem JDK statt JRE wars. Keine Ahnung warum ich nur das JRE drin hatte 

Und wie dein Eclipse Kaffee kocht hätte ich nun gerne ganz langsam und deutlich erklärt 

Kann den grade gut brauchen da mittlereile irgendwie garnix mehr funktioniert und ich wohl das halbe Programm umbauen darf :/


----------

