Метод Component.repaint()
, в частности, в Swing, только помечает компонент как нуждающийся в перерисовке, на самом деле он не запускает перерисовку напрямую.
Убедитесь, что вы разрешаете другим потокам работать, вызывая Thread.yield()
, так как это основной графический поток (который запустил другие ваши потоки), который фактически проверяет компоненты, чтобы увидеть, что нужно перекрасить.