Frage

Ich entwickle eine Queue-Simulation, einen Swing-Timer mit Objekten nach bestimmten Mengen an Zeit aus der Warteschlange entfernt. Das Intervall wird bestimmt, indem in der Warteschlange am nächsten Objekt Spähen, immer eine ganze Zahl von ihm, und Einstellen der Verzögerung des entsprechenden Timers.

Hier ist der relevante 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, in einer Sekunde verarbeitet wird.

Gibt es eine andere Methode oder Technik soll ich die Verzögerung eingestellt werden?

War es hilfreich?

Lösung

Es scheint, dass, wenn ein Timer stop()ing, die Verzögerung, die das nächste Ereignis ausgelöst verwendet wird, die anfängliche Verzögerung ist. Somit ist die richtige Methode 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();

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top