2014-04-03 2 views
0

안녕하세요, 자바 스윙 타이머를 사용하여 임의의 간격으로 Person 개체를 생성하려고합니다.자바 스윙 타이머의 무작위 시간 간격?

나는 함수를 사용하여 임의의 푸 아송 수를 생성하고 있으며, 임의로 생성 된 수를 지연으로 사용하여 다음 사람 객체를 만들 계획입니다. 그러나 포아송 값이 9 초 간격을 나타내지 만 모든 것이 1 초 ~ 1 초 사이에 생성되기 때문에 작동하지 않는 것처럼 보입니다. 다음은 솔루션에서의 시도입니다.

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

, 그냥 지연이 단순히 작동하지 않는 시간 간격으로, 또는 있다는 것을 사용합니다.

미리 감사드립니다.

답변

4

stop() 또는 restart() 타이머를 사용하지 마십시오.

restart() 메소드에 대한 API 설명을 읽고 그 이유가 작동하지 않는 이유를 확인하십시오.

또는 타이머를 중지/시작해야하는 경우 initial delay을 재설정해야합니다.

정확한 해결책이 확실하지 않지만 조금만 놀아 드리겠습니다.

+0

와우 효과가 있습니다. 나는 당신이 그 물건을 "재설정"하기 위해 멈춰 설 필요가 있다고 생각했습니다. 대단히 고마워, 나는 바보 야. D –