2013-05-15 2 views
0

변수 "카운터"를 1 씩 5 초마다 증가시키는 간단한 코드가 있다고 가정 해 보겠습니다. "카운터"가 5에 도달하면 타이머를 중지하고 싶습니다. 객체 수신기 (특정 이벤트 수신)을 사용하고 싶습니다. 이것이 가능한가?특정 이벤트 수신 (객체 수신기)

public class CallMe{ 

static int counter = 0; 

public static void main(String[] args) { 

    // This code increments counter variable by 1, every 5 seconds. 

    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(new TimerTask() { 

     @Override 
     public void run() { 

      counter++; 
      System.out.println(counter); 

     } 
    }, 1000, 5000); 



} 

}

+0

그것은 확실히 가능하지만 당신이 그 사건을해야합니다, 당신은 내가 아는 그 사건 – greedybuddha

답변

-1

당신은 당신의 TimerTask에 취소 메서드를 호출 할 수 있습니다 :

@Override 
    public void run() { 

     counter++; 
     if(counter == 5) { 
      this.cancel(); 
     } 
     System.out.println(counter); 

    } 
+0

을들을 것 청취자를 작성해야합니다. 하지만 객체 리스너에 관심이 있습니다. 카운터가 5에 도달하면 특정 코드가 실행됩니다. Android (DialogInterface.OnClickListener)와 마찬가지로 Dialog를 클릭하면 메소드 및 (사용자) 사용자 정의 코드를 제공하는 인터페이스입니다. – rootpanthera

1

그것은 참으로 매우 가능하다. java.util Observer와 Observable에는 두 개의 인터페이스가 있습니다. 이러한 인터페이스를 사용하여 관찰자 패턴을 구현할 수 있습니다. "Observable Examples"가있는 Google 만 있으면 많은 리소스를 찾을 수 있습니다.

이 클래스를 Observable로 구현하고 Observer 클래스로 다른 클래스를 만들면됩니다. 카운터가 5에 도달하면 notifyObservers() 메소드를 호출하기 만하면 등록 된 모든 옵저버에 대한 이벤트가 시작됩니다.

0

변수에 Observer pattern을 구현해야합니다.

카운터를 포함하는 클래스는 카운터가 무엇인지에 대해 통지 받기를 원하는 클래스의 컬렉션을 유지해야합니다. 그런 다음 카운터가 5에 도달하면 모든 수신자에게 알림을 보냅니다.

@Override 
public void run() { 
    counter++; 
    System.out.println(counter); 
    if(counter == 5) { 
     notify(); 
    } 
} 

private void notify() { 
    for(ChangeListener l : listeners) { 
     l.stateChanged(new ChangeEvent(counter)); 
    } 
} 

다른 클래스 :

class Obs implements ChangeListener { 
    @Override 
    public void stateChanged(ChangeEvent e) { 
     System.out.println(e); 
    } 
} 
관련 문제