2013-12-22 4 views
0

Я видел такие сообщения раньше, но вопросы или ответы неясны, так что несите меня, если вы слышали это раньше. У меня есть таймер, и я хочу, чтобы ActionEvent произошел, когда таймер выключен. Я не хочу использовать метод javax.swing.Timer. Как это может быть сделано? Нет необходимости объяснять, но это было бы полезно. Я искал что-то, как ActionEvent.do() методJava Firing ActionEvent

Мой код:

/** 
* 
* @param millisec time in milliseconds 
* @param ae action to occur when time is complete 
*/ 
public BasicTimer(int millisec, ActionEvent ae){ 
    this.millisec = millisec; 
    this.ae = ae; 
} 

public void start(){ 
    millisec += System.currentTimeMillis(); 
    do{ 
     current = System.currentTimeMillis(); 
    }while(current < millisec); 

} 

Спасибо! Dando18

+1

* «Я видел сообщения, как это раньше, но они не спрашивают хорошо» * ... какое совпадение ... –

+0

Просто используйте 'Timer'. Ваша реализация кажется одиночной. –

+0

@SotiriosDelimanolis Я хочу знать, как это сделать без таймера. – Dando18

ответ

0

Здесь у вас есть простая реализация таймера. Почему вы просто не проверяли, как работают другие таймеры?

public class AnotherTimerImpl { 

     long milisecondsInterval; 
     private ActionListener listener; 
     private boolean shouldRun = true; 

     private final Object sync = new Object(); 

     public AnotherTimerImpl(long interval, ActionListener listener) { 
      milisecondsInterval = interval; 
      this.listener = listener; 
     } 

     public void start() { 
      setShouldRun(true); 
      ExecutorService executor = Executors.newSingleThreadExecutor(); 
      executor.execute(new Runnable() { 

       @Override 
       public void run() { 
        while (isShouldRun()) { 
         listener.actionPerformed(null); 
         try { 
          Thread.sleep(milisecondsInterval); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
          break; 
         } 
        } 

       } 
      }); 
     } 

     public void stop() { 
      setShouldRun(false); 
     } 

     public boolean isShouldRun() { 
      synchronized (sync) { 
       return shouldRun; 
      } 
     } 

     public void setShouldRun(boolean shouldRun) { 
      synchronized (sync) { 
       this.shouldRun = shouldRun; 
      } 
     } 

    }