i got this error when i try to logout : -
Code:
[1/11/14 11:03 AM]: Game saved for player Cody
[1/11/14 11:03 AM]: [DEREGISTERED]: Cody
[1/11/14 11:03 AM]: java.util.ConcurrentModificationException
[1/11/14 11:03 AM]: at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
[1/11/14 11:03 AM]: at java.util.ArrayList$Itr.next(Unknown Source)
[1/11/14 11:03 AM]: at server.event.cycle.CycleEventHandler.stopEvents(CycleEventHandler.java:60)
[1/11/14 11:03 AM]: at server.model.players.Client.destruct(Client.java:148)
[1/11/14 11:03 AM]: at server.model.players.PlayerHandler.removePlayer(PlayerHandler.java:284)
[1/11/14 11:03 AM]: at server.model.players.PlayerHandler.process(PlayerHandler.java:129)
[1/11/14 11:03 AM]: at server.Server$1.execute(Server.java:128)
[1/11/14 11:03 AM]: at server.event.Task.tick(Task.java:103)
[1/11/14 11:03 AM]: at server.event.TaskScheduler.run(TaskScheduler.java:98)
[1/11/14 11:03 AM]: at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
[1/11/14 11:03 AM]: at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
[1/11/14 11:03 AM]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
[1/11/14 11:03 AM]: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
[1/11/14 11:03 AM]: at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
[1/11/14 11:03 AM]: at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
[1/11/14 11:03 AM]: at java.lang.Thread.run(Unknown Source)
my CycleEventHandler.java
Code:
package server.event.cycle;
import java.util.ArrayList;
import java.util.List;
/**
* Handles all of our cycle based events
*
* @author Stuart <RogueX>
* @author Null++
*
*/
public class CycleEventHandler {
private static CycleEventHandler instance;
public static CycleEventHandler getSingleton() {
if (instance == null) {
instance = new CycleEventHandler();
}
return instance;
}
private List<CycleEventContainer> events;
public CycleEventHandler() {
this.events = new ArrayList<CycleEventContainer>();
}
public void addEvent(int id, Object owner, CycleEvent event, int cycles) {
this.events.add(new CycleEventContainer(id, owner, event, cycles));
}
public void addEvent(Object owner, CycleEvent event, int cycles) {
this.events.add(new CycleEventContainer(-1, owner, event, cycles));
}
public void process() {
List<CycleEventContainer> eventsCopy = new ArrayList<CycleEventContainer>(events);
List<CycleEventContainer> remove = new ArrayList<CycleEventContainer>();
for (CycleEventContainer c : eventsCopy) {
if (c != null) {
if (c.needsExecution())
c.execute();
if (!c.isRunning()) {
remove.add(c);
}
}
}
for (CycleEventContainer c : remove) {
events.remove(c);
}
}
public int getEventsCount() {
return this.events.size();
}
public void stopEvents(Object owner) {
for (CycleEventContainer c : events) {
if(c.getOwner() == owner) {
c.stop();
}
}
}
public void stopEvents(Object owner, int id) {
for (CycleEventContainer c : events) {
if(c.getOwner() == owner && id == c.getID()) {
c.stop();
}
}
}
public void stopEvents(int id) {
for (CycleEventContainer c : events) {
if(id == c.getID()) {
c.stop();
}
}
}
}
my logout method on client class : -
Code:
public void logout() {
if (System.currentTimeMillis() - logoutDelay > 10000) {
CycleEventHandler.getSingleton().stopEvents(this);
outStream.createFrame(109);
properLogout = true;
} else {
sendMessage("You must wait a few seconds from being out of combat to logout.");
}
}
my removeplayer method
Code:
private void removePlayer(Player plr) {
if (plr.privateChat != 2) {
for (int i = 1; i < GameConfig.MAX_PLAYERS; i++) {
if (players[i] == null || players[i].isActive == false)
continue;
Client o = (Client) PlayerHandler.players[i];
if (o != null) {
PlayerAssistant.updatePM(o, plr.playerId, 0);
}
}
}
plr.destruct();
}