Java Swing Timer的随机时间间隔?

时间:2014-04-03 19:00:19

标签: java swing random timer delay

您好我正在尝试使用java swing timer以随机间隔生成Person对象。

我正在使用函数生成随机泊松数,我计划使用随机生成的数字作为延迟来创建下一个人物对象。然而,它似乎不起作用,因为所有东西彼此仅产生约1秒,即使泊松值表示9秒间隔。以下是我尝试解决方案:

private ActionListener generatePerson = new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        doSomething();
        updateTimer();
    }

    private void doSomething()
    {
        try {
            newPerson = new person(buildingType,currenttime,totnumoffloors);
            newPerson.setArrivalTime(timeElapsed);
            newPerson.printArrival();
            peopleQueue[newPerson.currentFloor-1]++;
            floorQueue[newPerson.currentFloor-1]++;
            System.out.println("Added a new person to the queue.");
            repaint();
            System.out.println("Done repainting.");
        } catch (IOException ex) {
            System.out.println("Unable to create object!");
        }
    }

    private void updateTimer()
    {
        int lol = 0;
        periodicPerson.stop();
        newPoissonTime = generatePoisson();
        newPoissonTime = (newPoissonTime*1000);
        lol = (int)newPoissonTime;
        System.out.println("NEW POISSON TIME: " + lol);
        periodicPerson.setDelay(lol);
        periodicPerson.restart(); 
    }
};

我将泊松时间乘以1000,将其转换为秒。

然后我生成初始计时器:

periodicPerson = new Timer((int)generatePoisson()*1000, generatePerson);

我认为问题在于它生成Poisson时,它只是将其用作时间间隔,或者说延迟根本不起作用。

非常感谢你!

1 个答案:

答案 0 :(得分:4)

不要stop()restart()计时器。

阅读restart()方法的API说明,找出不起作用的原因。

或者,如果您确实需要停止/启动计时器,则还需要重置initial delay

我不确定确切的解决方案,我会让你玩一点。