У меня есть функция, которая мигает границей JButton, которая вызывается несколько раз подряд. Я хочу, чтобы процессы продолжались только после завершения всей функции. Прямо сейчас, мигание начинается для одной кнопки, после чего начинается другая, прежде чем мигание остановится для первой кнопки. Функция выглядит следующим образом, который в классе, который простирается JButton:Подождите, пока таймер/процесс завершится до продолжения
public void flash() {
final Timer timer = new Timer(7, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
alpha += increment;
if (alpha >= 255) {
alpha = 255;
increment = -increment;
}
if (alpha <= 0) {
alpha = 0;
increment = -increment;
}
setBorder(BorderFactory.createLineBorder(new Color(81, 171, 112, alpha), 4));
}
});
timer.start();
final Timer delay = new Timer(
2000,
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0, 0), 0));
timer.stop();
}
});
delay.setRepeats(false);
delay.setCoalesce(true);
delay.start();
}
Измените свой вопрос, чтобы сделать ваше поведение более ясным. Если под «процессами» вы подразумеваете любой код в текущем потоке, кроме кода 'flash(), вы можете просто сделать' flash() 'блокирующим вызовом. Тем не менее, я подозреваю, что вы действительно хотите для каждого вызова 'flash()' для очереди события, которое должно дождаться завершения всех предыдущих вызовов 'flash()'. Таким образом, позволяя другому коду продолжать и только задерживая код 'flash()'. – CandiedOrange
BTW, 'delay.setCoalesce (true);' ничего не делает для вас, так как значение true является значением по умолчанию. http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html#setCoalesce(boolean) – CandiedOrange
Спасибо за помощь, но вы правы. Я хочу, чтобы все вызовы flash() завершились до вызова следующего. – tbcrawford