我们如何更改timer参数以接受双延迟值而不是int?

时间:2012-07-03 11:01:50

标签: java

我是java的新手。我试图在指数到达间隔时间(非整数)收集动态事件。

但我想要我的计时器'值为double,有没有替代方法让Timer Class接受双倍的值?

我尝试使用Timer ActionListerner,如下所示:

double timer = data.getInterArrivalTime(0.5);
    timer1 = new Timer(timer, new DataCollection());
    timer1.start();

我的DataCollection类是:

private class DataCollection implements ActionListener
{
    public void actionPerformed(ActionEvent e)
        {

        int eventValue =  data.poisson(25);
        valueListAtOrigin.addLast(eventValue);
        time = time + timer;
        timeListAtOrigin.addLast(time); 

        }
}

2 个答案:

答案 0 :(得分:2)

计时器最多只精确到最接近的毫秒。即使你可以设置一毫秒的分数,它也不会以这种方式工作。

最简单的方法是使用演员表将时间四舍五入到最近的long

timer1 = new Timer((long) timer, new DataCollection());

BTW为了您的兴趣,Object.wait(long millis,int nanos)的代码是

public final void wait(long timeout, int nanos) throws InterruptedException {
    if (timeout < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
            "nanosecond timeout value out of range");
    }

if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
    timeout++;
}

wait(timeout);
}

答案 1 :(得分:0)

使用浮点数(浮点数和双精度数)而不是整数数(int和long)是一个常见的错误。在您的方案中,应使用int或long来测量时间间隔,例如:毫秒。