icon[x] = new ImageIcon(image[x]);
icon[x].getImage().flush();
label.setIcon( icon[x] );
Я бы посоветовал вам не читать изображения с диска.
Загрузите все ImageIcon в массив в начале вашего класса, а затем просто переберите массив, чтобы получить следующий значок для обновления метки.
Edit:
В анимации всего 4 уникальных кадра.
Но у вас есть массив из 7 иконок.
icon[h].getImage().flush();
Нет необходимости в флеше. Вы просто создаете ImageIcons.
label.setIcon(icon[h]);
Почему вы продолжаете устанавливать значок ярлыка каждый раз, когда создаете новый значок? Это означает, что последний созданный значок будет первым отображаемым значком.
Я ожидаю, что вы должны назначить значок [0] метке ПОСЛЕ окончания цикла. Я предполагаю, что это является причиной мерцания, потому что последний значок кратко отображается перед первым. Так что если вы по умолчанию выберете первое, у вас не будет проблем.
В анимации всего 4 уникальных кадра. Анимации длиной 64 кадра воспроизводят каждое изображение как кадр 16 раз
Вам не нужны 2 таймера для этого. Вам нужны две переменные.
- тот, который продолжает увеличиваться до 64, а затем останавливает анимацию
- тот, который продолжает увеличиваться до 3, а затем сбрасывается до 0