2011-08-01 5 views
1

기본적으로 클래스의 인스턴스 변수 인 int 값 x가 있습니다. 처음에는 0으로 설정됩니다. 나는 "getNum"이라는 다른 메소드를 가지고 x를 증가시키고 리턴한다. 이 getNum() 메서드는 외부 프로그램에 의해 호출됩니다. 그러나 매일 (자정에 단순하게하기 위해) x를 0으로 재설정하고 싶습니다. 어떻게 처리 할 수 ​​있습니까? 내가 지금 가지고있는 문제 : Date (int, int, int)는 더 이상 사용되지 않지만 메서드는 Calendar가 아니라 Dates 만 사용합니다. TimerTask 이벤트는 결코 발생하지 않습니다. 하단에 프로그램을 실행할 때마다 번호가 계속 재설정되지 않아도 매번 "0"이 인쇄됩니다. 기본적으로 아무것도 작동하지 않습니다. 어떤 아이디어가 잘못 될까요? scheduleAtFixedRate(TimerTask, Date, long)에 대한 문서 당자바 프로그램에서 일정 시간 간격으로 무언가를 만드는 방법은 무엇입니까?

import java.util.*; 
class Foo { 
    private static void scheduleTimer() { 
    Timer timer = new Timer(); 
    long c = 86400000; 
    timer.scheduleAtFixedRate(new MyTimerTask(), 
    new Date(2011, 7, 31), c); 
    } 
    public static int getNum() { return x++; } 
    private static int x = 0; 
    public static void resetNum() { x = 0; } 
} 

class MyTimerTask() extends TimerTask { 
    public void run() { 
    Foo.resetNum(); 
    } 

public class Bar { // in a separate file 
public static void main (String[] args) { 
    System.out.println(Foo.getNum()); 
    } 
} 
+0

어딘가에서 발생하는 scheduleTimer에 대한 실제 호출이 있다고 가정합니까? –

+0

이 스 니펫에서 실제로 진행되고있는 것이 무엇인지 알려주는 것도 매우 어렵습니다. 귀하의 자바 응용 프로그램이 종료되면 내 이해는 그 변수 값을 유지하지 않습니다. 당신이 그것을 기대하고 있다면, main()이 그것을 호출 한 후 종료 할 때, 당신은 여기서 당신의 디자인에 뭔가 잘못 됐을 것입니다. –

답변

1

두 개의 컴파일 오류를 수정하고 Foo.scheduleTimer()를 어딘가에 호출하여 실제로 타이머를 시작하고 타이머에 적절한 지연과 기간 (몇 초 정도)을 준 다음 Foo.getNum()을 단지 일단. 예를 들면 다음과 같습니다.

import java.util.Timer; 
import java.util.TimerTask; 

public class Foo { 
    public static void scheduleTimer() { 
     Timer timer = new Timer(); 
     long c = 3000; 
     timer.scheduleAtFixedRate(new MyTimerTask(), c, c); 
    } 

    public static int getNum() { return x++; } 
    private static int x = 0; 
    public static void resetNum() { x = 0; } 
} 

class MyTimerTask extends TimerTask { 
    public void run() { 
     Foo.resetNum(); 
    } 
} 

class Bar { 
    public static void main(String[] args) throws Exception { 
     Foo.scheduleTimer(); 
     while (true) { 
      System.out.println(Foo.getNum()); 
      Thread.sleep(1000); 
     } 
    } 
} 
0

: 고정 속도 실행을 반복

스케줄 지정된 작업, 지정된 시간에 시작. 후속 실행은 지정된 기간으로 구분 된 대략 일정한 간격 인 에서 발생합니다.

그래서 작업을 호출하는 데 약 86400000 밀리 초가 걸립니다. 실제로 작동하지 않는지 오래 동안 기다리고 계십니까?

+0

아니요, 3000 초/3 초에서 최대 30 초까지 시도했지만 아무 것도 작동하지 않았습니다. 864000000, 언젠가는 일단 작동이 확인되면 결국 될 것입니다. – joseph

관련 문제