我正在为游戏服务器 API 开发一个名为 Bukkit 的插件;该插件允许玩家玩迷你游戏 - 游戏中的游戏。
我面临的问题是停止游戏。当游戏停止时,它会循环遍历该游戏中的所有玩家,然后将其删除。问题是,当玩家被删除时,他们就会从竞技场列表中删除。这个竞技场列表就是正在循环的内容;导致ConcurrentModificationException。
这是我的代码:
ArrayList<String> players = new ArrayList<String>(arena.getPlayers());
for(String player : players){
removePlayer(Bukkit.getPlayer(player));
}
在removePlayer函数中,玩家将从arena.getPlayers()中删除。
如有任何帮助,我们将不胜感激。
编辑:这是 github 存储库 https://github.com/MCMedia/GunGames/blob/master/src/com/ViralAftermath/GunGame/Arena/ArenaManager.java
最佳答案
当您对某个项目进行迭代时,无法从 ArrayList 中删除该项目。
您应该更改代码以使用迭代器,然后调用 .remove ()
类似于
Iterator <String> it = players.iterator ();
while (it.hasNext ()) it.remove ();
它将删除玩家身上的所有元素。但你可以使用更好的方法来清除数组。
它将解决您的问题,当然您应该将此示例改编为您的实际代码。但是当您从正在读取的 ArrayList 中删除一个项目时,就会出现问题。您应该使用适当的 .remove 项目或使用索引..
关于java - 并发修改异常;无法修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21955506/