在我的代码中,我有几个对象:
ArrayList
。该对象具有值(timeNeeded),该值是int
的时间。 arraylist位于模型中,可以检查它是否包含一个对象:model.isWaiting()
,该对象的值可以通过model.getdelay()
Timer
(Swing),需要运行ArrayList
中的值,该值由另一个类填充。涉及的逻辑包括以下内容:
ArrayList
为空,则需要每1毫秒检查一次,如果有新值。ArrayList
中的第一个对象),它需要删除第一个对象并设置计时器到1毫秒,直到有另一个对象添加。这是我的代码:
Timer myTimer;
Model model;
public className(Model modelInput) implements ActionListener
{
model = modelInput;
myTimer = new Timer(1, this);
myTimer.start();
}
@Override
public void actionPerformed(ActionEvent arg0)
{
//see if there is an object in the arraylist.
if (model.isWaiting())
{
// if the delay is currently not equal to the delay given in the object waiting. set the delay to the time given by the object
if ( myTimer.getDelay() != model.getdelay())
{
myTimer.setDelay(model.getdelay());
}
// if the time waited is equal to the time given by the object waiting remove the object and set the timer to check again every 1 milisecond.
else
{
System.out.println("runned after "+myTimer.getDelay());
model.removeFirst();
myTimer.setDelay(1);
}
}
}
所以它只应该通过removeFirst()
从模型中删除,如果有一个对象在等待(myTimer.setDelay(model.getdelay());
)并且延迟被设置为对象所需的延迟。
但由于某种原因,计时器过早发生。如果我打印延迟,这是正确的延迟。但是,如果我实时查看,它运行else语句几乎快6次:它与打印不一样。
我的代码中是否存在错误导致计时器在错误的时刻运行?
model.getdelay()
的延迟总是大于1000,因此它永远不会等于1.因此代码到达else语句。我也尝试用原始值3000替换model.getdelay()
并且没有任何区别。
基本上我想要的是,如果ArrayList
中有一个对象(即model.isWaiting() == true
),则使用该对象的值(model.getdelay()
)启动计时器。如果该对象中给出的时间已经过去,那么我需要使用ArrayList
从model.removeFirst()
中删除该对象。换句话说: