Java için Rastgele Zaman aralıkları Zamanlayıcı Salıncak?

oy
0

Merhaba ben java salıncak zamanlayıcı kullanılarak rasgele aralıklarla bir Kişi nesnesi oluşturmak için çalışıyorum.

Bir fonksiyon kullanılarak, rasgele bir sayı üretmek Poisson am ve bir sonraki kişi nesne oluşturmak için bir gecikme bu rasgele üretilen numarayı kullanmak için düşünüyorum. Bununla birlikte, her Poisson değeri 9, ikinci aralık göstermesine rağmen, birbirinden sadece yaklaşık 1 saniye oluşturuluyor olarak çalışan değil gibi görünmektedir. İşte bir çözüme benim girişimi:

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(); 
    }
};

Ben saniye dönüştürmek 1000 ile Poisson zaman çarpılır.

Sonra olarak başlangıç ​​sayacı oluşturur:

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

Ben sorun Poisson oluşturduğunda, sadece gecikme basitçe çalışmıyor zaman aralığı olarak veya o kullanır olduğunu düşünüyorum.

Şimdiden çok teşekkür ederim!

Oluştur 03/04/2014 saat 18:00
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
4

Yapma stop()ya restart()Timer.

Bu işe yaramazsa nedenini öğrenmek için yeniden başlatma () yöntemi için API açıklamasını okuyun.

Durman gerek yoksa Ya / Zamanlayıcı başlar, daha sonra da sıfırlamak gerekir initial delay.

Ben kesin çözüm emin değilim, ben biraz oynamak bildireceğiz.

Cevap 03/04/2014 saat 18:04
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more