Изменение задержки Swing Timer во время выполнения - PullRequest
2 голосов
/ 31 мая 2009

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

Вот соответствующий фрагмент программы (Примечание: _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();

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

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

1 Ответ

3 голосов
/ 31 мая 2009

Может показаться, что при 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();

}
...