У меня проблема при повторении ArrayList of Sockets. Цель списка - отправить сообщение всем клиентам, когда подключается другой, кроме последнего. Я получаю ConcurrentModificationException и не знаю, как с ним справиться. Пожалуйста помоги!
Серверная программа:
public void start() {
try {
serverSocket = new ServerSocket(10001);
thread = new Thread(new MessageClient(listOfClients));
thread.start();
while (!isStopped) {
socket = serverSocket.accept();
listOfClients.add(socket);
synchronized (listOfClients) {
listOfClients.notifyAll();
}
g.getTextArea().append(
"Client number " + listOfClients.size()
+ " has connected.\n");
threadClient = new Thread(new SerThread(socket, listOfClients));
threadClient.start();
}
} catch (IOException e) {
}
}
Программа потока (MessageClient):
public void run() {
while (true) {
for (Iterator<Socket> cl = listOfClients.iterator(); cl.hasNext();) {
synchronized (listOfClients) {
cur = cl.next();
if (!cur.equals(listOfClients.get(listOfClients.size() - 1))) {
try {
System.out.println("dddddddd");
ous = new PrintWriter(cur.getOutputStream());
ous.println("Client " + listOfClients.size()
+ " has connected.");
ous.flush();
} catch (IOException e) {
JOptionPane
.showMessageDialog(null,
"There was a problem getting your outputstream.");
}
try {
System.out.println("ddd");
listOfClients.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}