java根据输入设置时间

时间:2014-01-26 17:10:38

标签: java timer

在我的代码中,我有几个对象:

  • 带有对象的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())启动计时器。如果该对象中给出的时间已经过去,那么我需要使用ArrayListmodel.removeFirst()中删除该对象。换句话说:

  1. 检查是否有物体。
  2. 在对象中以给定的毫秒数运行计时器。
  3. 删除对象。

0 个答案:

没有答案