Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并发访问列表_Java_Multithreading_Libgdx_Concurrent Programming - Fatal编程技术网

Java 并发访问列表

Java 并发访问列表,java,multithreading,libgdx,concurrent-programming,Java,Multithreading,Libgdx,Concurrent Programming,我正试图用Libgdx在Java中制作一个“类似Zelda”的游戏。因为我的播放器还需要很多其他东西,所以我尝试使用线程(例如:用于ennemies)。 但是,我有一个例外,我没有找到解决方案: 线程“侵权1”中的异常线程“侵权2”中的异常com.badlogic.gdx.utils.GdxRuntimeException:#迭代器()不能嵌套使用。 位于com.badlogic.gdx.utils.Array$ArrayIterator.hasNext(Array.java:523) 位于co

我正试图用Libgdx在Java中制作一个“类似Zelda”的游戏。因为我的播放器还需要很多其他东西,所以我尝试使用线程(例如:用于ennemies)。 但是,我有一个例外,我没有找到解决方案:

线程“侵权1”中的异常线程“侵权2”中的异常com.badlogic.gdx.utils.GdxRuntimeException:#迭代器()不能嵌套使用。 位于com.badlogic.gdx.utils.Array$ArrayIterator.hasNext(Array.java:523) 位于com.defel.game.entite.ennemi.ennemi.deplacementAleatoire(ennemi.java:368) 位于com.defel.game.entite.ennemi.ennemi.run(ennemi.java:234)

有关的守则是:

private synchronized void deplacementAleatoire(){
    animationCourante = animationMarche[direction];

    boolean bloquer = false;

    for (MapObject obj : InfosSingleton.getInstance().getCollisionObjects()) {
        RectangleMapObject rectMapObject = (RectangleMapObject) obj;
        Rectangle rectObject = rectMapObject.getRectangle();

        if(Intersector.overlaps(rectObject, rectangleColl)){
            bloquer = true;
        }
    }

    if(bloquer){
        switch (direction) {
        case 0:
            direction = 2;
            break;
        case 1:
            direction = 3;
            break;
        case 2:
            direction = 0;
            break;
        case 3:
            direction = 1;
            break;

        default:
            break;
        }
    } 

    switch (direction) {
    case 0:
        rectangle.setY(rectangle.getY() + 2);
        rectangleColl.setY(rectangleColl.getY() + 2);
        break;
    case 1:
        rectangle.setX(rectangle.getX() - 2);
        rectangleColl.setX(rectangleColl.getX() - 2);
        break;
    case 2:
        rectangle.setY(rectangle.getY() - 2);
        rectangleColl.setY(rectangleColl.getY() - 2);
        break;
    case 3:
        rectangle.setX(rectangle.getX() + 2);
        rectangleColl.setX(rectangleColl.getX() + 2);
        break;

    default:
        break;
    }
}
我认为我的线程不能同时访问列表,但我不知道如何解决它


你有什么想法吗?Thank=D

该网站仅英文版,无需将您的问题用法文翻译(法文版,法文版就足够了。)发布的代码与发布的异常不匹配,您可以发布
Ennemi#deplacementAleatoire的代码吗不能在谷歌搜索结果中使用“嵌套”;这些都没有提供任何线索吗?这似乎是
com.badlogic.gdx.utils.Array
实现的问题。它发生在单个线程中。看。我们仍然不知道Ennemi的第368行是什么。此外,
InfosSingleton
的代码也有助于获得答案。我认为问题出在
getCollisionObjects