В основном у меня есть класс "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 ожидает завершения программы, прежде чем отобразить окончательный результат кода.
Как я могу противостоять этому?