Вы фактически блокируете поток пользовательского интерфейса, вызывая sleep
в цикле. В этом цикле вы также добавляете двух слушателей на каждую итерацию, что довольно странно.
Не блокируйте поток пользовательского интерфейса. Позвольте инфраструктуре GUI позаботиться о доставке событий и т. Д. В основном вам нужно использовать подход к пользовательскому интерфейсу, основанный на событиях, а не тот подход, который вы используете , который никогда не позволит отправлять события (как вы вы никогда не вернете контроль вызывающей стороне).
Создайте панель, добавьте соответствующий прослушиватель событий, а затем просто верните его вызывающей стороне. Если вы хотите менять цвет фона каждые 4 секунды, вы должны сделать это с помощью таймера , чтобы он не блокировал поток пользовательского интерфейса, ожидающий 4 секунды.