public class PlayerManager { private static final Map<String, Player> players = Collections .synchronizedMap(new HashMap<String, Player>()); public synchronized void add(Player player) { players.put(player.getName(), player); } public synchronized void remove(Player player) { players.remove(player); } public List<Player> getPlayers() { return Collections.synchronizedList((List<Player>) players.values()); } public synchronized int getOnlinePlayers() { return players.size(); } public synchronized Player getPlayer(String player) { return players.get(player); } public void sendPacketToAll(PacketWritable packet) { sendPacketToAll(packet, null); } public void sendPacketToAll(PacketWritable packet, Player exceptPlayer) { for (Player player : getPlayers()) { if (player != exceptPlayer) { player.writePacket(packet); } } } public String toString() { StringBuilder output = new StringBuilder(); output.append("[Online:" + getOnlinePlayers() + "]"); boolean first = true; output.append("["); for (Player player : getPlayers()) { if (first) { output.append(player.getName()); first = false; } else { output.append(", " + player.getName()); } } output.append("]"); return output.toString(); } } When I try to get a list of players using the getPlayers() method, getPlayers() get an error:
java.util.Collections $ SynchronizedCollection cannot be cast to java.util.List.
By googling did not come to a solution. Tell me how to fix it.
Map.values()returns only aCollection. - VladD