Код Джеймса Гудвина не будет работать.mousePressed и mouseReleased оба запускаются из потока GUI, поэтому блокировка в mousePressed предотвратит запуск mouseReleased из когда-либо, что означает, что цикл будет продолжаться вечно.
Если у вас уже есть отдельный поток для обработки, используйте mousePressed, чтобы указать на тот поток, который должно начаться, и mouseReleased для остановки.
Если у вас нет отдельной нити и вы не хотите хлопот, таймер, вероятно, самый простой способ. javadoc on Timer.
В частности, вы должны создать TimerTask, который делает то, что вы хотите сделать несколько раз и поставить его в очередь с помощью Timer.schedule:
Timer timer = new Timer();
TimerTask task = new MyTimerTask();
private class MyTimerTask extends TimerTask {
public void run() {
// your code here
}
}
public void mousePressed(MouseEvent e) {
timer.scheduleAtFixedRate(task, 0, 1000); // Time is in milliseconds
// The second parameter is delay before the first run
// The third is how often to run it
}
public void mouseReleased(MouseEvent e) {
task.cancel();
// Will not stop execution of task.run() if it is midway
// But will guarantee that after this call it runs no more than one more time
}
Я уверен, что это самый простой способ, как это не включает в себя faffing around с межпоточной связью.
О, и, как сказал Петр, вам нужно будет добавить код для учетной записи пользователя, который будет работать на вашем приложении и где-то в другом месте.
Вы уверены, что не имеете в виду несколько раз? Как бы вы справились с бесконечным количеством событий? – robertc
Я подумывал о том, чтобы отправить другую тему, что-то делать, и ждать. Когда поток возвращается, если кнопка все еще включена, сделайте это снова. –