Aktualizacja JButton na zegarze w pętli do-while

Mam pewne problemy z uzyskaniem przycisku JButton do wielokrotnej aktualizacji (używanej z zegarem) w pętli do-while. Pracuję nad prostą grą, rozgrywaną na siatce 10 * 10 obiektów kafelków, które odpowiadają tablicy JButton z 100 przyciskami.

Ta część programu obsługuje proste odnajdywanie ścieżki (tzn. Jeśli kliknę postać, a następnie pustą płytkę, postać przesunie się przez każdy kafelek w drodze do celu). Pomiędzy każdym krokiem występuje opóźnienie, dzięki czemu użytkownik może zobaczyć postęp postaci.

W obecnym stanie rzeczy ruch jest prawidłowy, ale przycisk J jest aktualizowany tylko wtedy, gdy postać dotrze do celu, a nie na etapach pośrednich.

public void move(int terrainTile)
{
    int currentPosition = actorList.get(selectedActor).getPosition();
    int movementValue = 0;
    int destination = terrainTile;
    int destinationX = destination / 10;
    int destinationY = destination % 10;

    do
    {
        currentPosition = actorList.get(selectedActor).getPosition();  // Gets PC's current position (before move)
        System.out.println("Old position is " + currentPosition);
        int currentX = currentPosition / 10;
        int currentY = currentPosition % 10;


        if(actorList.get(selectedActor).getCurrentAP() > 0)
        {
            movementValue = 0;

            if(destinationX > currentX)
            {
                movementValue += 10;
            }

            if(destinationX < currentX)
            {
                movementValue -= 10;
            }

            if(destinationY > currentY)
            {
                movementValue += 1;
            }

            if(destinationY < currentY)
            {
                movementValue -= 1;
            }

            int nextStep = currentPosition + movementValue;

            myGame.setActorIdInTile(currentPosition, -1);  //Changes ActorId in PC current tile back to -1
            scrubTiles(currentPosition);

            actorList.get(selectedActor).setPosition(nextStep);  //  Sets new position in actor object
            System.out.println("Actor " + selectedActor + " " + actorList.get(selectedActor).getName() + " position has been updated to " + nextStep);

            myGame.setActorIdInTile(nextStep, selectedActor); // Sets ActorId in moved to Tile
            System.out.println("Tile " + nextStep + " actorId has been updated to " + selectedActor);

            buttons.get(nextStep).setIcon(new ImageIcon(actorList.get(selectedActor).getImageName()));

            // If orthagonal move AP-4
            if(movementValue == 10 || movementValue == -10 || movementValue == 1 || movementValue == -1)
            {
                actorList.get(selectedActor).reduceAP(4);
            }
            // If diagonal move AP-6
            else
            {
                actorList.get(selectedActor).reduceAP(6);
            }

            System.out.println(actorList.get(selectedActor).getName() + " has " + actorList.get(selectedActor).getCurrentAP() + " AP remaining");

            try
            {
                Thread.sleep(500);    // one second
            }
            catch (Exception e){} 

            buttons.get(nextStep).repaint();

        }

        else
        {
            System.out.println(actorList.get(selectedActor).getName() + " has insufficient AP to move");
            break;
        }

    }while(destination != (currentPosition + movementValue));

Co próbowałem:

buttons.get (nextStep) .repaint (); (Próbowałem umieścić polecenie, aby odświeżyć przycisk po ustawieniu obrazu. Brak zmian.

buttons.get (nextStep) .revalidate (); (Nie ma 100% pewności, co to robi - pojawiło się jako potencjalne rozwiązanie, ale nie działa).

Kroki 1 i 2 połączone

Sprawdzona w klasie huśtawki czasowej - ruch nie występuje za każdym razem, gdy wystrzelona zostanie akcja, (tylko jeśli wybrana jest postać, a płytka celu jest pusta), więc nie wiem, jak mogłem to zrobić

Każda pomoc byłaby bardzo mile widziana!

questionAnswers(2)

yourAnswerToTheQuestion