Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125

VirtualIndex

Aktives Mitglied
Ich erhalte die folgende Fehlermeldung:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at Client.getNewsHeadlines(Client.java:140)
    at Client$1.actionPerformed(Client.java:67)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Die betroffene Stelle ist diese:

Java:
    public void getNewsHeadlines(String link) throws IOException {
        Document doc = Jsoup.connect(link).get();
        Elements newsHeadlines = doc.select("a[href][title]");
        int length = newsHeadlines.size();
        for(int i = 0;i<length;++i) {
            if(!newsHeadlines.get(i).hasText()) {
                newsHeadlines.remove(i);
            }
        }
        System.out.println(newsHeadlines.size());
        newsHeadlines.trimToSize();
        System.out.println(newsHeadlines.size());
    }

Die ArrayListe newsHeadlines wird beim Programmstart deklariert und in dieser Methode zum ersten Mal initialisiert. Ich verstehe leider nicht ganz, warum hier eine IndexOutOfBoundsException geworfen wird. Zum Probieren habe ich die Variable length um mehrere Werte verkleinert, aber das Ergebnis bleibt das Gleiche. Woran liegt das?
 

Joose

Top Contributor
Du nimmst die Größe der ArrayList als Wert für "length".
Und gehst eine for-Schleife so oft durch wie length groß ist.
In der Schleife entfernst du dann einfach Elemente (die Liste wird kleiner) aber du erhöhst dein "i" ganz normal weiter. Wenn du ein Element aus der Liste entfernst dann musst du "i" wieder um 1 reduzieren.
 

Flown

Administrator
Mitarbeiter
Beim Iterieren über eine Collection und dann auch noch Veränderung durchführen, können zu unverhersehbaren Problemen (so wie deine) führen. Der "way to go" ist hier einen Iterator zu nutzen.
Java:
for(Iterator<Element> iter = newHeadlines.iterator(); iter.hasNext();) {
	Element element = iter.next();
	if(element.hasText()) {
		iter.remove();
	}
}
 

VirtualIndex

Aktives Mitglied
Falls ja, dann versuch mal newsHeadlines nur bis length-1 zu durchlaufen

Das klappt leider nicht.

Beim Iterieren über eine Collection und dann auch noch Veränderung durchführen, können zu unverhersehbaren Problemen (so wie deine) führen. Der "way to go" ist hier einen Iterator zu nutzen.

Das hatte ich schon probiert, nur minimal anders. Dein Weg führt zu einer NullPointerException, die in einer anderen (später aufgerufenen) Methode liegt. Ich werde diese also überarbeiten müssen und dann geht es vermutlich. Der Grund dafür dürfte sein, dass ich die Struktur dieser Methode vorher etwas anders hatte und sie nun weniger Speicher verbraucht.

Danke euch!
 
Zuletzt bearbeitet:

VirtualIndex

Aktives Mitglied
Ich sitze im Moment an der Überarbeitung dieser Methode:

Java:
  public void removeItemsbyBadWords() {
     String[] arrBadWords = settings.getBadWords();
     for (int i = 0; i < arrBadWords.length; ++i) {
       String filter = ":contains(" + arrBadWords[i] + ")";
       Elements ele = newsHeadlines.select(filter);
       if (ele != null && ele.size() > 0) {
         for (Iterator<Element> iter = ele.iterator(); iter.hasNext();) {
           iter.remove();
         }
       }
     }
   }

Erneut ist es eine NPE:

Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Client.removeItemsbyBadWords(Client.java:149)
    at Client$1.actionPerformed(Client.java:68)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Dumping Java heap ... done.

Was ist hier das Problem? Beim Problem davor weiß ich nun wieso und habe es auch verstanden, aber hier scheint es einen anderen Grund zu haben, bloß mit den gleichen Symptomen. Diese Methode wird direkt nach dem Aufruf der Methode getNewsHeadlines ausgeführt.
 
Zuletzt bearbeitet:

VirtualIndex

Aktives Mitglied
Also die Variablen arrBadWords, das i der for-Schleife und filter werden korrekt initialisiert. Ab der Zeile
Java:
Elements ele =  newsHeadlines.select(filter);
stürzt das Programm. Wie die Objekte zu dem Zeitpunkt sind kann ich nicht herausfinden.

Laut FindBugs befindet sich dort eine NPE, weil es Situationen gibt, wo null als Wert zurückkommen kann. Das sollte ich aber durch meine if-Bedingung abfangen. Oder ist hier ein grober Gedankenfehler?

Java:
Bug: Read of unwritten field newsHeadlines in Client.removeItemsbyBadWords()
The program is dereferencing a field that does not seem to ever have a non-null value written to it. Unless the field is initialized via some mechanism not seen by the analysis, dereferencing this value will generate a null pointer exception.
Rank: Scary (8),
confidence: Normal

Pattern: NP_UNWRITTEN_FIELD

Type: NP,
Category: CORRECTNESS (Correctness)<hr size="1" />

XML output:
<BugInstance type="NP_UNWRITTEN_FIELD" priority="2" rank="8" abbrev="NP" category="CORRECTNESS" first="26"> <Class classname="Client"> <SourceLine classname="Client" sourcefile="Client.java" sourcepath="Client.java"/> </Class> <Method classname="Client" name="removeItemsbyBadWords" signature="()V" isStatic="false"> <SourceLine classname="Client" start="146" end="156" startBytecode="0" endBytecode="276" sourcefile="Client.java" sourcepath="Client.java"/> </Method> <Field classname="Client" name="newsHeadlines" signature="Lorg/jsoup/select/Elements;" isStatic="false"> <SourceLine classname="Client" sourcefile="Client.java" sourcepath="Client.java"/> </Field> <SourceLine classname="Client" start="149" end="149" startBytecode="44" endBytecode="44" sourcefile="Client.java" sourcepath="Client.java"/> <SourceLine classname="Client" start="149" end="149" startBytecode="44" endBytecode="44" sourcefile="Client.java" sourcepath="Client.java"/> </BugInstance> <hr size="1" />

At Client.java:[line 149]
In method Client.removeItemsbyBadWords()
Field Client.newsHeadlines
 
Zuletzt bearbeitet:

Joose

Top Contributor
Wie flown schon gesagt hat, verwende den Debugger.
Gehe zu der Zeile die du gefunden hast, wo das Programm abstürzt, und kontrolliere welches der Objekte null ist. ;)

PS: Deine for-Schleife wird nicht ganz funktionieren, da fehlt ein ganz wichtiger Aufruf. So würdest du endlos probieren immer das selbe Element aus der Liste zu entfernen
 

VirtualIndex

Aktives Mitglied
Die for-Schleife ist defekt gewesen, zumindest in der hier geposteten Version.

Das eigentliche Problem war, dass in der hier geposteten getNewsHeadlines eine Methodenvariable definiert und initialisiert wird, statt wie gewollt die Klassenvariable initialisiert wird mit dem Ergebnis. Dadurch gab es die unerwarteten Fehler und das Debugging viel schwer, da die Inhalte da waren, aber in einer Variable, die nicht weitreichend genug sichtbar war.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
N Exception in thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.p Allgemeine Java-Themen 4
T Design - Exception in Thread Allgemeine Java-Themen 3
J Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 26
S Exception in Thread "main" java.lang.NoClassDef. b Allgemeine Java-Themen 2
B Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 12
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 15
P Exception in thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 3
B Exception in thread "main" java.lang.OutOfMemoryEr Allgemeine Java-Themen 5
S Exception in thread "main" java.lang.StringIndexOu Allgemeine Java-Themen 9
G Exception in thread "main" :? Allgemeine Java-Themen 5
E Exception in Thread "main" java.lang.NoClassDefFou Allgemeine Java-Themen 5
W Queue.remove() -> no such element exception Allgemeine Java-Themen 17
N Kann ich die Nullpointer Exception umgehen Allgemeine Java-Themen 12
N A java Exception has occured Allgemeine Java-Themen 8
G javafx "class path" exception Allgemeine Java-Themen 5
H Interface PluginSystem ClassNotFound exception für library Klassen Allgemeine Java-Themen 10
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
S Exception Allgemeine Java-Themen 5
LimDul Streams und Exception Allgemeine Java-Themen 8
C FileLock - Exception wird immer geworfen Allgemeine Java-Themen 4
S Wertbeschränkung Exception oder Anpassung? Allgemeine Java-Themen 4
D Nullpointer Exception Problem Allgemeine Java-Themen 5
Kirby.exe Nullpointer Exception bei Queue Allgemeine Java-Themen 5
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
S RMI Exception Allgemeine Java-Themen 0
S MSSQL Exception & Connection String Allgemeine Java-Themen 19
S Interface, generischer Datentyp, Exception? Allgemeine Java-Themen 3
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Klassen Serializable Exception Allgemeine Java-Themen 1
M xlsx File auslesen Exception occured Allgemeine Java-Themen 13
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
G Java/LibGDX File Loading Exception Allgemeine Java-Themen 2
B Exception in Application init method Allgemeine Java-Themen 5
H OOP Testen einer Exception mit JUnit Allgemeine Java-Themen 8
M javafx ComboBox- Nullpointer Exception Allgemeine Java-Themen 6
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Thallius Bekomme keine Exception mit Stacktrace mehr. Was habe ich getan? Allgemeine Java-Themen 13
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Z Exception wird nicht ausgelöst Allgemeine Java-Themen 2
0 Animiertes Gif anzeigen - NullPointer Exception Allgemeine Java-Themen 19
T Konstruktor löst exception aus Allgemeine Java-Themen 7
KilledByCheese Dezimal nach Hexadezimal rechner wirft seltsame exception Allgemeine Java-Themen 4
D Codeausführung bevor Exception abgeschlossen ist Allgemeine Java-Themen 11
T FileNotFound Exception Allgemeine Java-Themen 9
L Exception/Error auf JDialog umleiten Allgemeine Java-Themen 2
C Arithmetic Exception, obwohl nichts 0 ist Allgemeine Java-Themen 5
M A Java Exception has occured. Allgemeine Java-Themen 1
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
E A Java Exception Has Occured Allgemeine Java-Themen 4
T Exception handling Allgemeine Java-Themen 7
P lazy loading exception Allgemeine Java-Themen 0
A Interpreter-Fehler OutOfMemory Exception mit Base64 decode Allgemeine Java-Themen 3
S Java Applet Crash - Keine Exception Allgemeine Java-Themen 8
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
P Eigene Exception Klasse Allgemeine Java-Themen 7
N Java Interne Exception Allgemeine Java-Themen 4
B JUnit4 Exception-Test Allgemeine Java-Themen 4
127.0.0.1 SQL Exception, kein Driver Allgemeine Java-Themen 9
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
R ZIP FileSystem unter Windows wirft exception Allgemeine Java-Themen 7
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
Ollek Barcode mit Barcode4J erzeugen - Exception Allgemeine Java-Themen 4
Z Concurrent Modification Exception - HashMap (kein remove) Allgemeine Java-Themen 4
E Eigene Exception Klasse erstellen Allgemeine Java-Themen 3
L Variablen IO Exception weil File angeblich nicht exisitert Allgemeine Java-Themen 10
T Exception versus Rückgabeparamter Allgemeine Java-Themen 26
S Exception enableDepthTest Allgemeine Java-Themen 7
M JAXB Reimport zu Hibernate DB -> Exception Allgemeine Java-Themen 3
W Kleine Frage zu Null-Pinter-Exception Allgemeine Java-Themen 21
aze JUnit: Testen ob bestimmte Exception nicht auftritt Allgemeine Java-Themen 18
S Null Pointer Exception bei BufferedReader Allgemeine Java-Themen 4
N Runtime.exec() Exception Problem Allgemeine Java-Themen 3
P Default constructor cannot handle exception type Allgemeine Java-Themen 6
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
S Bildaufbau durch Servlet -> Exception Allgemeine Java-Themen 11
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
S Exception beim Schreiben des Dataset in XML Datei Allgemeine Java-Themen 8
M Webstart Exception trotz signierten JARs Allgemeine Java-Themen 3
E Interpreter-Fehler unbekannte Exception Allgemeine Java-Themen 12
B Komische Exception Allgemeine Java-Themen 4
U SwingWorker und Exception Allgemeine Java-Themen 3
B Nullpointer Exception in Array Allgemeine Java-Themen 15
G WebService Exception Allgemeine Java-Themen 3
M Best Practices Exception Handling für eigene library Allgemeine Java-Themen 8
G PermSpace Exception Allgemeine Java-Themen 2
S Invalid Chunk Exception Allgemeine Java-Themen 3
N URLClassLoader Exception Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben