У меня возникла проблема при повторении ArrayList из сокетов. Цель этого списка - отправить сообщение всем клиентам, если другой подключается, кроме последнего. Я получаю ConcurrentModificationException, и я не знаю, как управлять им. Пожалуйста помоги!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) {
}
}
программа Thread (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();
}
}
}
}
}
}
Вставить трассировку стека. Обычно вы получаете ConcurrentModificationException, когда пытаетесь изменить отказоустойчивую коллекцию при ее итерации. Проверьте, где вы можете это делать, преднамеренно или иначе. – Nazgul
@Nazgul DDDDDDDD ддд Exception в потоке java.util.ConcurrentModificationException "Thread-0" \t в java.util.ArrayList $ Itr.checkForComodification (ArrayList.java:886) \t в java.util.ArrayList $ Itr.next (ArrayList.java:836) \t в com.omisoft.basic_java.networking_and_gui.task4.MessageClient.run (MessageClient.java:24) \t в java.lang.Thread.run (Thread.java:745) Это стек. –