我遇到了通过包含对象的Set
完成迭代(和修改)的问题。我已经尝试了很多迭代方法(4),但它们似乎都没有工作,仍然给我错误java.util.ConcurrentModificationException
。
[代码用Groovy编写]
private void replaceRock() {
ObjectNodeManager.OBJECTS.each {
System.out.println("Going...");
if(it.getPosition().withinDistance(player.getPosition(), 30)) {
System.out.println("Found...");
Position position = it.getPosition();
ObjectNode newRock = new ObjectNode(439, position, ObjectDirection.NORTH, ObjectType.DEFAULT);
ObjectNodeManager.unregister(it);
ObjectNodeManager.register(newRock);
it.remove();
}
}
}
我已尝试同步以防止从其他线程访问,但这也无效。请帮助我,我非常绝望。
答案 0 :(得分:1)
首先找到它们(这将基本上给你一个参考列表),然后处理它们:
ObjectNodeManager.OBJECTS.findAll {
it.getPosition().withinDistance(player.getPosition(), 30))
}.each{
ObjectNode newRock = new ObjectNode(439, it.position, ObjectDirection.NORTH, ObjectType.DEFAULT)
ObjectNodeManager.unregister(it)
ObjectNodeManager.register(newRock)
it.remove()
}
在随机网站上注意:我在replace
中添加ObjectNodeManager
方法,以合并取消注册,注册,删除。使用类方法和属性也不是最好的事情(但因为它看起来像游戏......)
答案 1 :(得分:0)
问题是您在循环对象时正在修改对象列表。
尝试重复遍历对象的副本。
ArrayList<YourType> copy = new ArrayList<YourType>(ObjectNodeManager.OBJECTS);
copy.each(...)