Ваша логика зацикливания на
for(int I=0;I<numPlayers;I++)
ошибочна, поскольку она не предполагает «дыр» в массиве игроков.Что, если у вас есть 3 подключенных игрока (0,1,2) и игрок № 0 отключается?Вы уменьшите значение «numPlayers» и больше никогда не будете смотреть на игрока # 2.
Кроме того, вы, похоже, не проверяете наличие нуля в массиве readers
и writers
, поэтому вы не устанавливаетеreaders[I]=null
затем вы начинаете пытаться ссылаться на него.
...
readers[I]=null;
writers[I]=null;
numPlayers--;
}
try {
System.out.println(readers[I].ready());
...
Скорее всего, вы генерируете исключение нулевого указателя где-то во всем этом и не видите его, потому что вы запускаете все это в потоке.