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 есть два интерфейса. Вы можете использовать эти интерфейсы для реализации шаблона наблюдателя. Просто google с «Observable Examples», и вы найдете много ресурсов.

Все, что вам нужно сделать, это реализовать этот класс как Наблюдаемый и создать другой класс в качестве наблюдателя. Когда ваш счетчик достигнет 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); 
    } 
} 
Смежные вопросы