您好我正在尝试使用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时,它只是将其用作时间间隔,或者说延迟根本不起作用。
非常感谢你!
答案 0 :(得分:4)
不要stop()
或restart()
计时器。
阅读restart()方法的API说明,找出不起作用的原因。
或者,如果您确实需要停止/启动计时器,则还需要重置initial delay
。
我不确定确切的解决方案,我会让你玩一点。