Я пытаюсь закодировать основную Java-программу, которая позволяет пользователю перемещать простую составную фигуру, и в ней есть кнопка (QuitButton), которая связана с закрытым классом QuitHandler.Когда нажата кнопка выхода, я хочу, чтобы анимация воспроизводилась в окне программы перед выходом из программы.Я знал, что мне нужно будет ввести задержку, чтобы пользователь мог видеть анимацию до выхода из программы, поэтому я добавил задержку, используя Thread.sleep (1000) после анимации, но до того, как System.exit (0)называется.Поэтому мой код выглядит примерно так:
//in private QuitHandler class (class linked to button)
//An ActionEvent is handed to handle(ActionEvent event) as a parameter
//when the quit button is clicked
public void handle(ActionEvent event) {
animation.animate();
this.delay();
System.exit(0);
}
private void delay() {
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
}
}
Всякий раз, когда я закомментирую this.delay () и System.exit (0), анимация, которую я хочу показать, воспроизводится очень хорошо.И всякий раз, когда я закомментирую animation.animate () и оставляю this.delay () и System.exit (0), всякий раз, когда я нажимаю кнопку выхода, происходит задержка в 1 секунду, а затем программа завершается.Однако, когда я прокомментировал все три (анимация, задержка и System.exit), анимация не воспроизводится , и я получаю только задержку, и программа завершается.
Мое понимание потока управления заставило бы меня поверить, что анимация должна воспроизводиться до того, как будет запущена задержка, поэтому я не понимаю, почему анимация работает сама по себе, но не тогда, когда this.delay ()и System.exit (0) вызываются после него.Я посмотрел метод Thread.sleep () в JavaDocs и не увидел ничего, объясняющего, почему моя реализация метода приведет к тому, что предыдущие методы не будут выполнены.Мое лучшее предположение заключается в том, что в методе Thread.sleep () есть что-то, что вызывает проблему, но я не уверен, что это может быть.