2009-05-30 3 views
2

Я разрабатываю симуляцию очередей, используя таймер Swing для удаления объектов через определенные промежутки времени. Интервал определяется просмотром следующего объекта в очереди, получением от него целого числа и установкой задержки его соответствующего таймера.Изменение задержки таймера поворота во время выполнения

Вот соответствующий отрывок из программы (Примечание: _SECONDS_PER_ITEM это константа, определенная в другом месте 2000):

// stop the timer 
qTimer[q].stop(); 

// peek at how many items the customer has, and set the delay. 
qTimer[q].setDelay(customerQueue[q].peek().getItems()*_SECONDS_PER_ITEM); 

// the next time around, this method will see the flag, and dequeue the customer. 
working[q] = true; 

// denote that the customer is active on the UI. 
lblCustomer[q][0].setBorder(new LineBorder(Color.RED, 2)); 

// start the timer. 
qTimer[q].start(); 

У меня есть проблема в том, что каждый клиент, независимо от того, сколько предметов у них есть, не обрабатывается через одну секунду.

Есть ли какой-либо другой метод или метод, который я должен использовать, чтобы установить задержку?

ответ

3

Казалось бы, когда stop() с таймером, задержка, которая используется для запуска следующего события, является начальной задержкой. Таким образом, правильный способ использования в приведенном выше примере равен setInitialDelay():

{ 
// stop the timer 
qTimer[q].stop(); 

// peek at how many items the customer has, and set the delay. 
qTimer[q].setInitialDelay(customerQueue[q].peek().getItems()*_SECONDS_PER_ITEM); 

// the next time around, this method will see the flag, and dequeue the customer. 
working[q] = true; 

// denote that the customer is active on the UI. 
lblCustomer[q][0].setBorder(new LineBorder(Color.RED, 2)); 

// start the timer. 
qTimer[q].start(); 

} 
Смежные вопросы