Многооконность и мои костыли vol.3

Версия Minecraft
1.12.2
476
9
39
Я сделал многооконность на базе, не поверите, мапы.
Да-да мапы, я решил проблему ConcurrentModificationException с помощью мапы. И решение казалось бы отличное.
Вот только я идиот и оно получилось или быстрым или тупо многопоточным(по моей гипотезе), а именно у каждого окна есть метод keyTyped по которому он итерируется... с помощью цикла for

Так теперь я кажется понял, почему оно мгновенно закрывается при открытии...
Когда происходят куча параллельных циклов где он делает примерно следующее:
Java:
for(int id : map.keyset())
if(map.get(id) != null)
  map.get(id).keyTyped(char, keyCode);
А тут, внезапно, добавилось по ключу окно
Код:
map.put(key, window); //Где-нибудь в коде, например в том же keyTyped у другого окна
и он тупейше вызывает у него этот метод и обрабатывает нажатие для него.. Хотя он уже закрыл окно. И делает это для нового окна.
Нда, гениальность зашкаливает.

А всё потому что вариант с Runnable иногда при быстром открытии/закрытии спавнил иногда два окна, что немного с прозрачными окнами критично.
Ну и плюс куча других проблем.
Поэтому мне казалось мапа хорошее решение.
Может кто что подскажет по этому поводу? (Адекватный мультивиндов без проблем Runnable в виде долгого закрытия окна или адекватный Map вариант без самозакрытия)
Если что-то непонятно, прошу прощения, я плохо изъясняюсь после рабочего дня, плюс докода по ночам.
P.S Закрываться окна могут все, сразу. Например когда GuiScreen на котором они размещены будет закрыт, это вызовет ивент закрытия у всех окон и удалит их из мапы вместе с ключами.
 
Сверху