Java 并发访问列表
我正试图用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) 有关的守则是: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
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