Возможно, я думаю, что код AWT правильный, но все остальное ужасно загадочно (не то, чтобы я этого не понимал, но это не отражает того, что вы на самом деле делаете очень хорошо, не так ли?)
Как насчет:
boolean running=false;
...
if(running)
System.exit(0);
else
running=true;
вместо
Обновление:
Прочитав ваше обсуждение в другом посте, вы почувствуете некоторую странность.
Существует такая концепция потока AWT. Все, что сделано с AWT, должно быть сделано в этой теме. Поэтому, когда нажимается пробел, вы получаете это событие в потоке AWT. Вы, вероятно, не хотите сохранять его, потому что, пока вы держите его, он будет предотвращать другие обновления графики.
Я предлагаю посмотреть на SwingTimer. Установите таймер колебания, чтобы он уведомлял вас каждые несколько мс, и это уведомление будет поступать в потоке AWT, чтобы вы могли использовать его, чтобы нажать кнопку, а затем просто выйти и дождаться следующего события таймера. .
Когда они снова нажимают пробел, system.exit () должен работать нормально.