Ich habe eine ziemlich große JavaFX-Anwendung, die die meiste Zeit gut funktioniert. Manchmal bekomme ich jedoch zufällige ArrayIndexOutOfBoundsExceptions, wenn ich durch die Anwendung klicke. Ich kann die Fehler nicht reproduzieren und weiß nicht, wann sie angezeigt werden: Manchmal kann ich problemlos durch die Anwendung klicken und manchmal stürzt die App ab und der Stacktrace erscheint.
%Vor%Beim Lesen des Stacktrace ist das einzige, was meine Aufmerksamkeit erregt hat, dass der Fehler in meinem Code nicht einmal auftritt. Kennt jemand von euch solche Probleme und hat eine Idee, wo ich anfangen könnte zu untersuchen oder was könnte dieses Problem verursachen?
Ich habe es auf JDK 1.8.0_74 (Windows 8.1 x64), JDK 1.8.0_77 (Windows 8.1 x64) und JDK 1.8.0_91 (OS X 10.11) versucht
Der beste Weg, dies zu tun, besteht darin, nach allen Array-Deklarationen Ausschau zu halten und dann zu überprüfen, ob einer von ihnen dynamisch zugreift, so dass der Index aus dem Rahmen gerät.
> Wenn Sie die Protokollierung in Ihre Anwendung einführen können, können Sie debug logs (log.debug(myArray.size() + arrayAccessVariable) )
Überprüfen Sie, ob eines der Arrays durch Eingaben von der GUI initialisiert wird (eine häufige Fehlerquelle).
Ich denke, in Ihrem Fall wird es von einem -1 zugegriffen. Es empfiehlt sich, vor jedem Zugriff eine negative Überprüfung einzuführen.
Eine andere gute Idee wäre, ArrayList
oder einen anderen Datentyp zu verwenden, der sich bei Bedarf selbst anpassen kann.
Da ich ziemlich neu bei JavaFX bin, könnte ich mich irren, aber ich hatte genau dieses Problem beim Schreiben eines Spiels. Das Problem in meinem Fall war, dass ich versuchte, die Objekte aus einem anderen Thread als dem "JavaFX Application Thread" zu verschieben. Da Sie Ihren Code nicht zur Verfügung gestellt haben, kann ich nicht sicher sein, aber ich würde vorschlagen, dass Sie Änderungen an der GUI nur über den "JavaFX Application Thread" vornehmen und diese beheben sollten.