java - 并发修改异常;无法修复

标签 java oop minecraft bukkit concurrentmodification

我正在为游戏服务器 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/

相关文章:

java - Java 如何获取网页的全部内容?

java - Spring 在创建对象后将 JsonView 应用于对象吗?

c++ - 为什么不能在 C++ 中将构造函数声明为静态的?

php - 确保 PHP 静态性的最佳方法?

oop - 低耦合和高内聚不是相互依赖的吗?

opengl - 无限魔方世界引擎(如Minecraft)优化建议?

java - 升级 Gradle

java - 当程序处于循环状态时如何发送事件?

java - 如何在android中点击自定义Gridview?

java - BufferedImage 到 2D 数组 : Finding pixelated edges