2017-10-19 18 views
0

나는 다음과 같은 문제가 있습니다 : 나는 자바에서 채팅 봇을 쓰고 있는데 x 분이라도 메소드를 호출하려고합니다. 그래서 "Timer.Schedule"이 내가 필요한 것입니다. 그래서 나는 다음과 같은 방법을 쓰기 : 루프가 잘 작동 초기에자바 Timer.Schedule (인피니티 루프) 실행 중지

public function timerMethod() 
{ 
    int time = 10; 

    ... 

    new java.util.Timer().schedule(
     new java.util.TimerTask() { 
      @Override 
      public void run() { 
       timerMethod(); 
      } 
     }, 1000 * 60 * time // 1MSec * 1Sec * xMin 
    ); 
} 

을하지만, 몇 시간 (나는 그것을 10 ~ 15 시간 후에 생각) 루프가 ... 더 이상 작동 해달라고 내가 왜을 잘 모릅니다 후 일을 해달라고 오류 메시지 :(

누군가가,

그렇다면? 당신이 코드의 X 분 동안 실행할 그래서

+0

'timerMethod()'에 예외가 발생할 수 있습니까? 'catch'를 호출하여 호출을 둘러보고이 가능성을 제거하기 위해 throw 된 예외의 세부 사항을 로그/인쇄하십시오. –

+0

예외는 없지만 ... 터미널 디스플레이 오류 또는 예외 ... – padhie

답변

0

, 올바른 ??? 나에게 문의처 도움이 원하는 시간을 변환 할 수 얻을 해달라고 밀리 초 단위로 실행되는 코드 : 1 분 = 60000 ms. System.currentTimeMillis()라는 메서드가 있는데, 이것은 EPOCH 날짜 (1970 년 1 월 1 일)에서 밀리 초의 값을 반환합니다.

는이 같은 while 루프를 사용할 수 있습니다

`

int msTime = 60000; //1 Minute = 60000 MS 
int doUntil = ms + System.currentTimeMillis(); //1 minute 
while(System.currentTimeMillis() != doUntil) 
{ 
    //Code here 
    System.out.println(¨Hello World¨); //This will print Ḧello World for 60000ms 

} 
+0

하시겠습니까? 이 코드 대신 내 타이머(). 일정()? – padhie

0

음 잘 먼저 여러 번에게 java.util.Timer() 변수의 인스턴스를 중지 할 수 있습니다. 클래스의 속성으로 하나만 필요합니다. timerTask는 다시 인스턴스화해야하는 유일한 객체입니다. 이제

private Timer timer = new Timer(); 

, 시도/캐치로 실행 함수 내에서 코드를 둘러싸고 :

  public void run() { 
      try { 
       timerMethod(); 
      } catch(InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 

것은 당신이 그 timerMethod 한 번만 호출하고 있습니까? 함수를 다시 스케줄 할 때와 메소드를 실행할 때마다 점검하기 위해이 코드에 일부 인쇄물을 추가 할 수 있습니다.

+0

try/catch try ...하지만 예외 나 오류가 없습니다 ... 다른 타이머가 3 개 있습니다. 동일한 타이머 개체를 사용할 수 있습니까? 아니면 각 타이머마다 자체 개체를 사용해야합니까? – padhie