punkyep 0 Denunciar post Postado Janeiro 19, 2015 tenho o seguinte código: package mext.maou.v2.tasks; import it.gotoandplay.smartfoxserver.data.User; import java.util.Map; import java.util.PriorityQueue; import java.util.concurrent.ConcurrentHashMap; import mext.maou.v2.world.World; import net.sf.json.JSONObject; public class WarzoneQueue implements Runnable { ConcurrentHashMap<String, PriorityQueue<User>> warzoneQueues = new ConcurrentHashMap<String, PriorityQueue<User>>(); @Override public void run() { for(Map.Entry<String, PriorityQueue<User>> e : warzoneQueues.entrySet()) { PriorityQueue<User> pq = e.getValue(); String warzone = e.getKey(); if(pq.size() == 10) { JSONObject PVPI = new JSONObject(); PVPI.put("cmd", "PVPI"); PVPI.put("warzone", warzone); for(int i = 0; i < 10; i++) { User user = pq.poll(); World.instance.sendResponse(new String[] {"server", "A new Warzone battle has started!"}, user); World.instance.sendResponse(PVPI, user); } } } } private PriorityQueue<User> getWarzoneQueue(String warzone) { if(warzoneQueues.containsKey(warzone)) { return warzoneQueues.get(warzone); } else { warzoneQueues.putIfAbsent(warzone, new PriorityQueue<User>()); return warzoneQueues.get(warzone); } } /** * * @param user */ public void removeUserFromQueues(User user) { for(PriorityQueue<User> pq : warzoneQueues.values()) { pq.remove(user); } } /** * * @param warzone * @param user */ public void queueUser(String warzone, User user) { PriorityQueue<User> pq = getWarzoneQueue(warzone); pq.offer(user); } } consigo compilar ele normalmente, porem, estou tendo um problema, com esse código o primeiro usuário é adicionado ou removido certinho, mas acima de 1 usuário eu recebo o seguinte erro: Exception in ExtensionHandler: java.lang.ClassCastException: it.gotoandplay.smartfoxserver.data.User cannot be cast to java.lang.Comparable Exception type: java.lang.ClassCastException java.lang.ClassCastException: it.gotoandplay.smartfoxserver.data.User cannot be cast to java.lang.Comparable at java.util.PriorityQeue.siftUpComparable<PriorityQeue.java:578> at java.util.PriorityQeue.siftUp<PriorutyQeue.java:574> at java.util.PriorityQeue.offer<PriorityQeue.java:274> at mext.maou.v2.tasks.WarzoneQeue.qeueUser<WarzoneQeue.java:69> meu objetivo e o seguinte, criar uma sala para cada 10 usuários, porem os usuários só iriam entrar na sala se tivesse os 10 usuários . alguém pode me ajudar? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Janeiro 20, 2015 Você tem acesso a classe User? Veja a documentação da PriorityQueue http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html Você precisa implementar a interface Comparator. Compartilhar este post Link para o post Compartilhar em outros sites
punkyep 0 Denunciar post Postado Janeiro 20, 2015 Você tem acesso a classe User? Veja a documentação da PriorityQueue http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html Você precisa implementar a interface Comparator. como posso " implementar a interface Comparator." sem retirar o runnable ? Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Janeiro 20, 2015 Em Java você só pode estender uma classe, porém pode implementar n interfaces. implements Runnable, Comparator Quem precisa implementar Comparator é a classe User Compartilhar este post Link para o post Compartilhar em outros sites
punkyep 0 Denunciar post Postado Janeiro 21, 2015 Em Java você só pode estender uma classe, porém pode implementar n interfaces. implements Runnable, Comparator Quem precisa implementar Comparator é a classe User eu não tenho acesso a classe User, teria outro método de eu fazer isto?, eu quero que a cada os 10 primeiros usuários entrem na sala, ou seja a cada 10 = uma nova sala para os 10. Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Janeiro 21, 2015 Não tem nem documentação dessa classe? Dá pra criar uma classe Usuario sua... pode usar herança mas pra isso User não pode ser final. Compartilhar este post Link para o post Compartilhar em outros sites