Опять же, использовать Swing-таймер:
// code not compiled nor tested. It was typed free-hand.
// so it was not meant to be copy, pasted and used, but rather to show you
// the idea.
public void mouseClicked(MouseEvent e) {
mouseX = e.getX();
mouseY = e.getY();
// don't use if (shot == false). Instead do:
if (!shot) {
Ink = 0;
}
// likewise, no need to use if (ready == true). Instead do:
if (ready) {
shot = true;
// turn off your ability to shoot here by setting a boolean.
ableToShoot = false;
// start a Swing Timer that does not repeat
// in the Timer turn back on the ability to shoot by setting a boolean
Timer swingTimer = new Timer(TIMER_DELAY_TIME, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// allow shots here
ableToShoot = true;
}
});
swingTimer.setRepeats(false);
swingTimer.start();
}
}
Примечания:
- Не используйте
Thread.sleep(...)
, если вы не хотите, чтобы положить ваши весь GUI для сна, так как это будет спать поток событий Swing.
- Не используйте java.util.Timer. Модель Threading Swing диктует, что почти все вызовы качаний выполняются в потоке событий Swing. Таймер Swing построен для этого, чтобы быть уверенным, что все вызовы в таймере вызываются в EDT, потоке событий Swing. Java.util.Timer этого не делает, и это приведет к тому, что иногда очень сложно отлаживать ошибки потоков, худшие ошибки.
- The Swing Timer Tutorial link.
- The Swing event threading model tutorial link
К OP: поиск в 'Качели Timer' и счастья будет улучшаться. Если вам по-прежнему нужна помощь после проверки учебника, расскажите нам больше о том, что вы пытаетесь сделать своим таймером, и о том, как ваш код не работает. –
@HovercraftFullOfEels Я видел это после. Я удалил комментарий. –