Я согласен с Йоханнесом, что обновление вашего пользовательского интерфейса из другого потока, скорее всего, не будет работать хорошо. Существуют механизмы, такие как SwingWorker
и SwingUtilities.invokeLater
, которые могут решить ваши проблемы с ошибками.
Однако большая проблема, которую я вижу, заключается в том, что вы сражаетесь со своей JLabel за то, кто ее рисует. JLabel - это обычный компонент, и всякий раз, когда его контейнер обновляется, он перекрашивает себя в свои обычные цвета. Это тот случай, когда «кто красит последним, тот побеждает».
Альтернативное предложение: почему бы просто не поиграть с атрибутом цвета метки? Если вы сделаете цвет переднего плана близким к цвету фона, он будет выглядеть как блеклый. Ярлык либо сам перекрасится, когда вы измените его цвет, либо вы можете принудительно перекрасить, используя update()
или repaint()
, я постоянно забываю, какой.
EDIT
Мне кажется, я вижу реальную причину, по которой это не работает. Вы устанавливаете цвет графического контекста метки. Это не имеет никакого эффекта! Любой компонент, который рисует части самого себя, будет устанавливать цвет, то есть погружать свою кисть в чернила, непосредственно перед рисованием чего-либо. И, конечно же, цвет, который он устанавливает для отрисовки символов, является исходным цветом метки. Ваш метод будет работать только в том случае, если код рисования метки по глупости забыл установить цвет перед рисованием.