2016-07-16 34 views
1

對於我正在編碼的bukkit插件,我需要從文件中獲得所有玩家權限,我不想以「 - 」開頭的權限,因爲這些權限是在另一個方法中調用的(要移除的權限從播放器),但我在爲得到一個ConcurrentModificationException的異常(字符串燙髮:S){ConcurrentModificationException獲取字符串時

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; 
} 

回答

3
List<String> results = s; 

列表中的「s」在其中你迭代的是同一個列表,「結果」,在其中添加元素。在迭代迭代時使用快速迭代器修改集合(大多數非併發集合)會拋出異常。

從上下文中,我假設你真正想要的是像

List<String> results = new ArrayList(); 
0

克隆原來的列表,然後使用它。否則,你正在修改相同的參考,因此得到例外。