Я не использую потоки, но постоянно получаю сообщение об ошибке:
"Исключение в потоке" AWT-EventQueue-0 "java.util.ConcurrentModificationException"
Вот мой код:
@Override
public void paint(Graphics g) {
for(Rectangles emp: shapes.list) {
//Loop through all rectangle objects
for(int[] temp: emp.arr) {
//Loop through each objects array
g.drawRect(temp[0], temp[1], 20, 20);
g.drawRect(20, 20, 20, 20);
}
}
}
Существует также метод из другого класса, который выполняется очень близко к методу рисования, снова и снова, что может вызывать проблему.
public class Shapes {
LinkedList<Rectangles> list = new LinkedList<Rectangles>();
Random rand = new Random();
void newshape() {
int shape = rand.nextInt(7);
switch(shape) {
case 0:
list.add(makeSquare());
break;
case 1:
list.add(makeLine());
break;
case 2:
list.add(makeTShape());
break;
case 3:
list.add(makeLShape());
break;
case 4:
list.add(makeJShape());
break;
case 5:
list.add(makeZShape());
break;
case 6:
list.add(makeSShape());
break;
}
}
Я использую игровой цикл Notch, где метод tick () вызывает метод newshape (), если с момента последнего создания новой фигуры прошло одну секунду. Затем вызывается метод рисования.
public void run(Game game) {
while(true) {
lastshapemake = System.nanoTime();
long lastTime = System.nanoTime();
double Target_FPS = 60.0;
double ns = 1000000000 / Target_FPS;
double delta = 0;
while(running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while(delta >= 1) {
tick();
delta--;
}
if(running) {
game.repaint();
}
}
}
}