Hi,
Ich habe momentan das Problem, dass ich eine Liste in 2 Unterschiedlichen Threads bearbeiten muss.
Der eine schmeißt alle 100 Millisekunden ein Objekt rein und der Andere sorgt dafür das Permanent was damit passiert.
Dabei kriege ich warum auch immer eine ArrayIndexOutOfBoundsException
Leider wird im Stacktrace keine von mir geschriebene Klasse erwähnt, sodass ich nicht weiß wo der Fehler ist.
Code:
Stacktrace:
EDIT: Wenn ihr mehr Code braucht, sagt bescheid
Ich habe momentan das Problem, dass ich eine Liste in 2 Unterschiedlichen Threads bearbeiten muss.
Der eine schmeißt alle 100 Millisekunden ein Objekt rein und der Andere sorgt dafür das Permanent was damit passiert.
Dabei kriege ich warum auch immer eine ArrayIndexOutOfBoundsException
Leider wird im Stacktrace keine von mir geschriebene Klasse erwähnt, sodass ich nicht weiß wo der Fehler ist.
Code:
Java:
public void starteSpiel() {
hindernisse = Collections.synchronizedList(new ArrayList<>());
Runnable bewege = () -> {
while (true) {
synchronized (hindernisse) {
for (Hindernis hindernis : hindernisse) {
hindernis.setzteAufNaechstePosition();
}
}
}
};
Thread bewegeHindernisse = new Thread(bewege);
bewegeHindernisse.setDaemon(true);
bewegeHindernisse.start();
@SuppressWarnings("static-access")
Runnable baue = () -> {
while (true) {
try {
synchronized (hindernisse) {
hindernisse.add(new Hindernis(hintergrund));
}
Thread.currentThread().sleep(zeitZumnachstenHindernis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread baueHindernisse = new Thread(baue);
baueHindernisse.setDaemon(true);
baueHindernisse.start();
}
Stacktrace:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 8
at java.awt.Container.getComponent(Container.java:334)
at javax.swing.JComponent.rectangleIsObscured(JComponent.java:4390)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:290)
at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
at javax.swing.JComponent._paintImmediately(JComponent.java:5158)
at javax.swing.JComponent.paintImmediately(JComponent.java:4969)
at javax.swing.RepaintManager$4.run(RepaintManager.java:831)
at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
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.awt.EventQueue.dispatchEvent(EventQueue.java:726)
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)
EDIT: Wenn ihr mehr Code braucht, sagt bescheid