Я пытаюсь обновить свой JLabel текущими номерами вращающегося колеса с увеличивающейся задержкой, которая представляет замедляющееся колесо. Я пробовал Thread.sleep(), Timer и invokeLater(), но, должно быть, я делаю что-то ужасно неправильное, так как ничего из того, что я пробовал за последние несколько дней, не сработало. Thread.sleep приводит к тому, что графический интерфейс обновляет только последнюю вещь, Timer игнорирует задержку и печатает результаты до завершения вращения, и я не смог заставить invokeLater() вообще обновить JLabel. Что я должен делать?
public void spin(int wheelSize, int initialDelay, int finalDelay, int delayIncrement, WheelCallback callback) {
/**
* Begins the spin on a random number within the wheelSize
*/
Random randomNum = new Random();
int currentNum = randomNum.nextInt((wheelSize - 0) + 1) + 0;
//frame.setLabel(Integer.toString(currentNum));
System.out.println(currentNum);
/**
* Loops the wheel until the finalDelay is met
*/
for(int i = initialDelay; i < finalDelay; i += delayIncrement) {
/**
* Causes the delay between numbers
*/
try {
Thread.sleep(i);
}
catch(InterruptedException e) {
}
/**
* Increments the number to the next number up on the wheel.
* If the number reaches the maximum, it is reset to the minimum
*/
currentNum++;
if(currentNum > wheelSize) {
currentNum = 0;
}
callback.nextNumber(currentNum, this);
}
callback.result(currentNum, this);
calculateResult(currentNum);
}
public void nextNumber(int nextNumber, GameEngine engine) {
frame.setLabel(Integer.toString(nextNumber));
}