2016-07-16 11 views
1

Für ein Bukkit-Plugin, das ich codiere ich brauche alle Spieler Berechtigungen aus einer Datei, ich möchte nicht die Berechtigungen, die mit "-" beginnen, weil diese in einer anderen Methode aufgerufen werden von Spielern), aber ich bin eine ConcurrentModificationException Ausnahme bei für (String perms bekommen: s) {ConcurrentModificationException beim Abrufen von Strings

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

Antwort

3
List<String> results = s; 

die Liste „s“, über die Sie iterieren die gleiche Liste wie „Ergebnisse“ ist, in die Sie Elemente hinzufügen. Wenn Sie eine Sammlung mit einem Fail-Fast-Iterator (die meisten nicht gleichzeitig ablaufenden Sammlungen) ändern, während Sie darüber iterieren, wird diese Ausnahme ausgelöst.

Von Zusammenhang gehe ich davon aus, was Sie wollten eigentlich so etwas wie

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

Clone war die ursprüngliche Liste und dann verwenden. Sonst modifizieren Sie die gleiche Referenz und erhalten dadurch eine Ausnahme.