获取字符串时出现ConcurrentModificationException

时间:2016-07-16 07:16:10

标签: java bukkit

对于我编码的bukkit插件,我需要从文件中获取所有玩家权限,我不希望以" - "开头的权限因为那些是在另一个方法中调用的(Perms要从播放器中删除)但是我在获得了一个ConcurrentModificationException异常(String perms:s){

public static List<String> getPerms(Player player){
    File f = new File(ServerCore.getPlugin().getDataFolder(), "permissions.yml");
    FileConfiguration rankData = YamlConfiguration.loadConfiguration(f);
    List<String> s = rankData.getStringList("Permissions.ranks."+ getPlayerRank(player) + ".permissions");
    for(String ss : getInheritance(player)){
        try{
            List<String> sss = rankData.getStringList("Permissions.ranks." + ss + ".permissions");
            s.addAll(sss);
        }catch(Exception e){
            e.printStackTrace();
        }

    }
    List<String> results = s;
    for(String perms : s){
        if(!perms.startsWith("-")){
            results.add(perms);
        }
    }
    return results;
}

2 个答案:

答案 0 :(得分:3)

 List<String> results = s;

The List&#34; s&#34;您正在迭代的是与要添加元素的&#34;结果&#34;相同的列表。在迭代它时使用失败快速迭代器(大多数非并发集合)修改集合将抛出该异常。

从上下文来看,我假设你真正想要的是像

 List<String> results = new ArrayList();

答案 1 :(得分:0)

克隆原始列表然后使用它。否则,您正在修改相同的引用,因此会出现异常。