【问题标题】:Random Time intervals for Java Swing Timer?Java Swing Timer的随机时间间隔?
【发布时间】:2023-03-08 05:35:01
【问题描述】:

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

我正在使用一个函数生成一个随机泊松数,并且我计划使用该随机生成的数字作为延迟来创建下一个 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);

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

非常感谢您!

【问题讨论】:

    标签: java swing random timer delay


    【解决方案1】:

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

    阅读 restart() 方法的 API 说明,了解为什么它不起作用。

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

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

    【讨论】:

    • 哇,它成功了!我认为你需要停下来“重置”这件事。非常感谢你,我是个白痴:D
    猜你喜欢
    • 2011-11-23
    • 2020-04-23
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    相关资源
    最近更新 更多