2016-07-16 3 views
1

bukkit 플러그인의 경우 파일에서 모든 플레이어 권한을 가져와야하므로 "-"로 시작하는 권한은 다른 메서드 (Perms가 제거됨)에 호출되므로 필요하지 않습니다. 플레이어)하지만 난 (대한 에서 문자열 파마하지 않고 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; 

리스트 "의"하는 동안 당신이 반복된다 "결과"와 같은 목록입니다, 그 안에 당신이 요소를 추가하고 있습니다. 패스트 패스트 반복자 (대부분의 비 동시성 컬렉션)로 컬렉션을 수정하면 반복을 통해 예외가 throw됩니다. 컨텍스트에서

, 나는 당신이 실제로 원하는 것은

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

복제 원래 목록 같은 것을 한 후 사용 가정합니다. 다른 경우 동일한 참조를 수정하므로 예외가 발생합니다.