Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
mein Programm stockt an irgendeiner Stelle und die IDE (Netbeans) gibt von sich:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException
Die Fehlermeldung sagt mir etwas, nur bin ich gewohnt, dass Netbeans mir das betreffende Modul, die auslösende Programzeile und die unpassende Index-Zahl nennt. In diesem Fall steht aber nichts von dem und ich steh' völlig auf dem Schlauch, wo ich suchen soll. Ich würde gerne Beispielcode posten, aber das Programm ist inzwischen so lang und komplex, und ohne jeden Anhaltspunkt kann ich nicht abschätzen, welche Codeteile hier von Bedeutung sind. Meine Hoffnung wäre, dass man auf irgend eine Weise eine etwas informativere Fehlermeldung erhalten könnte. Wisst Ihr Rat ???
Der Fehler tritt in der Regel auf, wenn du mit einer Schleife ein Array oder eine Liste durchläufst, aber einen Index ansprichst den es nicht gibt.
Falscher Code mit Exception:
Java:
int [] zahlen = {1,2,3,4,5,6};
for(int i = 0; i<=zahlen.length; i++){
System.out.println(zahlen[i]);
}
Richtiger Code ohne Exception:
Java:
int [] zahlen = {1,2,3,4,5,6};
for(int i = 0; i<zahlen.length; i++){
System.out.println(zahlen[i]);
}
[EDIT]Beim zweiten mal lesen fällt mir auf, dass dir meine Lösung nicht hilft [/EDIT]
[EDIT]
Um den Fehler einzugrenzen würde ich immer mal wieder ein paar System.out.println("Aussagekräftiger Text"); einbauen.
Damit lässt sich der Fehler etwas eingrenzen.
kriegt man auch nicht so eine Ausgabe. Da stünde dann nur
Code:
java.lang.ArrayIndexOutOfBoundsException
auf der Konsole.
Dass da kein Index steht, ist ja auch recht außergewöhnlich. Ich habe mir mal die Call Hierarchy des parameterlosen Konstruktors ausgeben lassen. Da kam dann das zustande:
Allgemein würde ich die Anwendung mal im Debug-Modus starten. Zumindest Eclipse stoppt, wenn eine Exception geworfen und nicht gefangen wird. Wie das nun bei Netbeans ist, weiß ich nicht.
Ich hab mich jetzt an meinen Fehler herangeprintlt. Eine völlig dämliche Sache. Ich habe für die ArrayList wert folgendes geschrieben:
Java:
for (int i = 0; i<wert.size(); i++){
if (wert.get(i)<wert.get(i-1)){
monoton=false;
break;
}
}
was ja schon in der ersten Runde bei wert.get(-1) eine Exception werfen muss. Ein dummer Flüchtigkeitsfehler. Dass die Schleife bei i=1 starten muss, hätte ich sofort erkannt, wenn ich einen Anhaltspunkt auf den Codeabschnitt gehabt hätte. Die gestutzte Meldung ist mir nach wie vor ein Rätsel. Der Code befindet sich in keinem Try-catch-Block, und die Methoden, die du ausfindig gemacht hast, xehpuk (danke für deine Mühe ) sind wohl auch nicht beteiligt. Alle im Programm vorhandenen Catch-Abschnitte lasse ich Meldungen mit "Ortsangaben" ausgeben, aber von denen springt keiner an. Very strange ...
Hallo Herr Kaiser
Schon allein die Tatsache, das die [c]AWT-EventQueue[/c] diese Exception schmeisst ist merkwürdig. Selbst wenn der Fehler in einem Listener auftaucht, hat man wie es aussieht in dieser Queue mindestens ein [c]printStackTrace()[/c] vergessen oder ersetzt. Dann wäre es natürlich ein Bug oder sehe ich das falsch?
Um dem Szenario möglichst nah heranzukommen, habe ich Folgendes gebaut:
Java:
public static void main(final String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
boolean b = true;
final ArrayList<Integer> list = new ArrayList<>();
list.add(42);
list.add(1337);
for (int i = 0; i < list.size(); i++) {
if(list.get(i) < list.get(i - 1)) {
b = false;
break;
}
}
System.out.println(b);
}
});
}
Bringt nichts. Sieht alles normal aus:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:371)
at java.util.ArrayList.get(ArrayList.java:384)
at ...
In Java 7 (inkl. Update 1) gabs ja einen Bug bei der Optimierung von Schleifen, wenn ich das richtig gelesen hatte. Vielleicht könnte dies ein gruseliger Nebeneffekt sein?
Getestet habe ich das mit
In Java 7 (inkl. Update 1) gabs ja einen Bug bei der Optimierung von Schleifen, wenn ich das richtig gelesen hatte. Vielleicht könnte dies ein gruseliger Nebeneffekt sein?
Getestet habe ich das mit
Vielleicht wäre das eine Erklärung. Solange das Projekt unter Java 6 lief, bin ich zumindest nie dieser Seltsamkeit begegnet. Meine Java-Version:
Code:
1.7.0_147-icedtea; OpenJDK 64-Bit Server VM 21.0-b17
EDIT: ach nee, wohl doch nicht. Wenn ich die gleiche Methode aus einer anderen Klasse heraus aufrufe, ist die Fehlermeldung vollständig. Da werde ich wohl irgendwo an einer anderen Stelle irgendeine Dämlichkeit begangen haben, die ich als Anfänger noch nicht überblicke. Wenn mein Groschen irgendwann fallen sollte, sage ich bescheid ...
Egal ob Du innerhalb der Schleife list.get( i + 1 ) oder list.get( i - 1 ) schreibst, bist Du out of bounds.
Im ersten Durchlauf willst du auf Element -1, im letzten Durchlauf auf grösstmöglicher Index +1.
Ausserdem... warum nimmst Du keine "foreach" :
Java:
List<String>strings = new ArrayList<String>();
fuelleStrings()...;
for (String string : strings) {
machWasMit( string );
}
Du kann einen so genannten Exception Breakpoint setzten. Dazu gehts du unter Debug->New Breakpoint. In diesem Dialog wählst du als "Breakpoint Type" Exception aus. In das Feld "Exception Class Name" trägst du "java.lang.ArrayIndexOutOfBoundsException" ein und klickst ok.
Wenn du jetzt dein Programm debuggst hält der Debugger in der Zeile an, die die ArrayIndexOutOfBoundsException verursacht.
Super, das ist ein guter Hinweis. Auf die Schnelle hat's zwar noch nicht funktioniert. Werde mich in den Debugger mal vertiefen und es nochmal sorgfältiger probieren. Was ich übrigens nebenbei festgestellt habe: wenn ich das Programm durch Aufruf der jar direkt in der Konsole laufen lasse, gibt's den ausführlichen StackTrace!
Also ist das Problem möglicherweise eine NetBeans-Zickigkeit? ...