no such child

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo

ich bin auf der Suche nach hilfe, und hoffe sie in eurem Forum zu finden, ich habe in der Suche eures Forums gesucht aber nichts vergleichbares gefunden.

Ich habe folgende FehlerMeldung:


Hit uncaught exception java.lang.ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException: No such child: 92
at java.awt.Container.getComponent(Container.java:237)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:3705)
at javax.swing.JComponent.paint(JComponent.java:806)
at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4795)
at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4748)
at javax.swing.JComponent._paintImmediately(JComponent.java:4692)
at javax.swing.JComponent.paintImmediately(JComponent.java:4495)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


Solche Fehler (mit diesen Fehlermeldungen) treten an den unterschiedlichsten Stellen in meinem Programm auf (allerdings mit Zahlen bei no such child von ca 85 bis 92(oder so). Da mein java-Projekt X-viele Classes hat, kann ich nicht einfach so auf die suche gehen. Ich brauche irgendeinen Anhaltspunkt, woran dies liegen könnte.

Als ich an einer bestimmten Situation des Projekts getestet habe, trat dieser Fehler ab und zu auf. da aber auch an dieser Situation y-viele Classes beteiligt sind und manche Classes 2000 - 3000 Zeilen haben, ist es nicht einfach möglich eine oder zwei classes mal durchzusuchen. Und bei so y-vielen Classes, kommt man nur schwer drauf.

Also habe ich an dieser Situation weiter getestet, der Fehler tauchte ca bei 1 von 10 mal auf. Aber warum dann nicht immer. Also habe ich durch kleine Test-Zeilen, so wie ich sie nenne, alle Variablen, die ab Testeinstieg (so nenne ich punkte, an denen ich ins Programm einsteigen kann, ohne, das Ganze Programm von vorne abarbeiten zu müssen (so als ob man einen Film erst ab Kapitel 13 anfängt)) verändert werden in Konstante umgewandelt, so dass ich eigentlich bei jedem Test die gleiche Bedingung, und das gleiche Programmverhalten erwarte.

Aber nein, trotzdem, steigt das Programm mit einer solchen FehlerMeldung hin und wieder aus. Aber nur hin und wieder. Und ich weiss nicht wieso.....

Dann habe ich es bestimmt 15mal, mit einem debug Zeile pro Zeile gemacht, und natürlich trat der Fehler dann nicht auf.


Nun würde ich ja gerne euch code anbieten, der mal durchgesehen werden könnte, aber welche der x-vielen Classes söllte ich nun hier posten, wenn ich keine Ahnung habe in welcher Gegend der Classen der Fehler hervorgerufen wird.


Bei den meisten Problemen, erhält man ja eine Fehlermeldung, die direkt zu einer Zeile im eigenen Code führt. Aber bei diesem fängt er ja in der awt.Container an.


Also, vielleicht könnt ihr mir helfen, und habt eine Idee, wie ich beim Suchen des Fehlers vorgehen kann....

Mit freundlichen Grüßen
 

Tobias

Top Contributor
Und wie sollen wir dir da jetzt helfen? An Swing liegt es ziemlich sicher nicht...

Mit Eclipse kann man Exception-Breakpoints setzen, vielleicht kommst du damit weiter.

mpG
Tobias
 
G

Guest

Gast
Hallo Tobias

Ich danke ihnen schon mal für ihre Antwort.

Ich benutzte JBuilder, bei dem ich auch Exeption Breakpoints setzte kann, doch aber nur im eigenen Code. Aber in diesem entsteht der Fehler nicht direkt. sondern in der getComponent-Methode der awt.container Classe, die wiederum vermutlich verwendet wird, da das ganze Programm in einem JWindow abläuft. an grafischen Elementen, benutzte ich nur Swing-Elemente, mische also keine AWT-Elemente darunter.

Die Nummer gibt denke ich die ID-Nummer des Elemente im Container an.

Wenn er also das Element 92 sucht, es aber nicht gibt, wird er diese Array-OutofBounds-Exception verursacghen.
Nur wieso findet er das Element nicht.

Mehere Gründe fallen mit ein:

Es gab nie ein Element 92, aber durch einen Programmfehler glaubt der Rechner das

Es gab ein Element 92, ist aber verloren gegangen.

Lang bevor der Dispatcher eine Abarbeitungsbefehl gab, gab es Element92, aber inzwischen ist es schon entfernt worden, oder verloren gegeangen


Aber wie stelle ich das fest???
 

Tobias

Top Contributor
Bevor meine Glaskugel auch nur ein schwammiges Bild zeigen kann, muss ich erst mal wissen, was du da überhaupt tust... Hast du irgendwelche eigenen Komponenten? Arbeitest du mit irgendwelchen merkwürdigen Einstellungen? Look&Feels, die aus einer nicht 100% für Qualität stehenden Quelle kommen? Veränderst du irgendwelche Swing-Einstellungen?

Die Fehlerbeschreibung ist schlicht nicht hilfreich, sie sagt nichts über die Bedingungen unter denen der Fehler auftritt, nichts darüber, was eigentlich getan wird usw.

mpG
Tobias
 
R

Roar

Gast
du rufst swing methoden aus einem anderen thread als dem EDT auf.
 
G

Guest

Gast
Hallo

Ich danke Ihnen wiedermals für die Antworten.

ich benutzte nur Elemente, die in Java 1.4 schon enthalten sind, also keine Downloads. Swing-Einstellungen?? also Komponenten umgeschrieben hab ich nicht. natürlich ändere ich einstellungen wie setVisible, setEnabled, nehme sie aus dem Container raus und rein. Aber nach den zufügen und dem entfernen steht immer ein validate. (zumindest sollte *g*, falls nicht irgendwo eins vergessen ist. fürs das zufügen und für das Entfernen in und aus dem Container, benutzte ich Methoden, in dem ein validate erntahlten ist. Nur in Ausnahmesituationen, füge ich über getcontentPane.add() etwas hinzu.

Ich habe mal einen neuen Thread hinzugefügt, der zu bestimmten Zeitpunkten den Inhalt des Containers, in versch. Vectors schreibt, um zu schauen, was oder welche Elemente nicht da sind.
Interessant ist, das es verschiedene Elemente sind. Mal ist es ein Element, das zu der Testphase, gar nicht angerührt wird (oder sollte) und tief und fest als Element in dem Container des JWindows (zwar anhezeigt) schlafen sollte.
mmh.
Es war aber auch schon ein Element, das tatsächlich herausgenommen wurde, also planmässig.
Für diesen Fall:
habe ich mir nun überlegt, ob die 2 parallelen Threads sind. Einer, der ein beliebiges Element bewegt. ein anderes, welches in diesem Fall, das eine Element entfernen will.
Der move-Thread setzte ein repaint (mit Elemenet 92), und zufällig zu gleichen Zeit auch der entfernEinElement-Thread (ohne Element92). der letztere wird ausgeführt (das Element wird einfernt) und das validate und das repaint wird ausgeführt, und danach erst der moveThread-Repaint mit Element92. Und dann kann er das Element92 nicht mehr finden.

Könnte das so hinkommen?? Oder müsste der validate aus dem Entfern-Thread auch den schon im DispatchThread wartenden Repaint des Move-Threads beinflussen????

mit freundlichen Grüßen
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben