Метод рисования не работает при использовании внутри ActionListener - PullRequest
0 голосов
/ 06 мая 2020

В основном у меня есть класс "Simulation", который запускает игру в змейку с использованием Jframe и рисует все в JPanel внутри него. Он отлично работает, когда используется отдельно:

public class Simulation {


public static void main (String args[]) {
    startSnake();
    }

public static void startSnake() {
    World p = new World(10);
    Affichage.showWorld(p);
    pause(1000);

    while(World.Lost==false) {
        p.moveSnake(p.getSnake());
        if (World.Lost==false) {
        Affichage.showWorld(p);
        }
        pause(100);
        }
}

public static void pause(int ms) {

    try{
        Thread.sleep(ms);
    }catch(InterruptedException e){}
}

}

При отдельном использовании он показывает правый фрейм следующим образом: https://i.stack.imgur.com/ttjbW.png

Но проблема в том, что когда я вызываю этот класс изнутри ActionListener, фрейм отображается неправильно:

    static class MenuSnake implements ActionListener{

    public void actionPerformed(ActionEvent e) {
                Simulation.startSnake();
        }
    }

Вместо этого он открывает пустой фрейм: https://i.stack.imgur.com/ZjCjp.png

И через мгновение (вероятно, после того, как змея врезается в стену), перерисовка () останавливается, она показывает содержимое кадра (без рисования змеи, только фон): https://i.stack.imgur.com/SZ38t.png

На самом деле кажется, что ActionPerformed ожидает завершения программы, прежде чем отобразить окончательный результат кода.

Как я могу противостоять этому?

...