2016-07-16 4 views
1

bukkitプラグインの場合、私はファイルからプレーヤー権限をすべて取得する必要がありますが、別の方法で呼び出されるパーミッションが削除されるため、 " - "プレイヤーから)が、私は(文字列のパーマ用でConcurrentModificationExceptionが例外を取得しています:あなたが反復され、その上の){文字列を取得するときに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

その後、クローン元のリストとそれを使用するようなものだった望んでいたものを想定しています。それ以外の場合、同じ参照を変更しているため、例外が発生します。

関連する問題