Java Firing ActionEvent
Я видел подобные посты раньше, но вопросы или ответы неясны, так что терпите меня, если вы слышали это раньше. У меня есть таймер, и я хочу, чтобы событие ActionEvent происходило при выключенном таймере. Я не хочу использовать метод javax.swing.Timer. Как это может быть сделано? Не нужно объяснять, но это было бы полезно. Я ищу что-то вроде метода ActionEvent.do()
Мой код:
/**
*
* @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 ответ
Здесь у вас есть простая реализация таймера. Почему вы просто не проверили, как работают другие таймеры?
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;
}
}
}