Как я могу остановить Swing Timer через n секунд? - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь заставить изображение мерцать с RaffleImage();, пока я выполняю таймер, мой персонаж невосприимчив к любому столкновению, я хочу, чтобы он был защищен только в течение 2 секунд, поэтому таймер должен выполняться только для 2 секунды, а затем закончите.

Я пытался вычесть System.currentTimeMillis(), но любая переменная, которую я создаю из этого метода, всегда имеет одно и то же значение, заставляя меня получить ноль от этого вычитания.

Знаете ли вы, как я могу остановить или приостановить таймер после истечения любого времени в секундах?

immuneTimer = new Timer(50, new ActionListener() {  
        @Override
    public synchronized void actionPerformed(ActionEvent e) {
    long initMillis = System.currentTimeMillis();
     if (System.currentTimeMillis() - initMillis > 2000 ) { // this substract gives me 0
        initImages();
        setImmune(false); // so this never reached
        immuneTimer.stop();
      } else {
            raffleImage(); //its executing like forever;
             }
      }
});

1 Ответ

0 голосов
/ 23 июня 2019

Таймер Swing запускает ActionEvent.Из события вы можете использовать getSource(), чтобы получить источник события.Приведите этот источник к таймеру колебания object и используйте его для его выключения.

Чтобы узнать, когда его отключить, вам нужно иметь переменную count, сколько раз вызывается таймер колебания.Когда переменная достигнет этой величины, выключите ее.


int elapsedTime = 0;
int timerDelay = 50;
int max = 2000;
public void actionPerformed(ActionEvent ae) {
     elapsedTime += timerDelay; // you could use getDelay here but it
                                // is in milliseconds.
     if (elapsedTime >= max) {
        Timer s = (Timer)ae.getSource();
        s.stop();
     }
     // rest of code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...