2009-05-30 16 views
2

Ich entwickle eine Queue-Simulation, die Swing-Timer verwendet, um Objekte nach bestimmten Zeitspannen aus der Warteschlange zu entfernen. Das Intervall wird bestimmt, indem auf das nächste Objekt in der Warteschlange geschaut wird, eine Ganzzahl daraus erhalten wird und die Verzögerung des entsprechenden Zeitgebers eingestellt wird.Ändern der Verzögerung eines Swing-Timers während der Laufzeit

Hier ist der entsprechende Ausschnitt aus dem Programm (Hinweis: _SECONDS_PER_ITEM ist eine Konstante, an anderer Stelle definiert 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(); 

Das Problem, das ich habe, ist, dass jeder Kunde, egal, wie viele Gegenstände, die sie haben, verarbeitet wird, in einer Sekunde.

Gibt es eine andere Methode oder Technik, die ich verwenden sollte, um die Verzögerung einzustellen?

Antwort

3

Es scheint, dass die Verzögerung, mit der das nächste Ereignis ausgelöst wird, die anfängliche Verzögerung ist. Somit ist das korrekte Verfahren, das in dem obigen Beispiel zu verwenden ist, 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(); 

} 
Verwandte Themen