3 import java.awt.event.ActionEvent;
\r
4 import java.awt.event.ActionListener;
\r
5 import java.util.ArrayList;
\r
6 import java.util.Date;
\r
8 import javax.swing.Timer;
\r
11 * 毎分00秒に処理をキックするタイマー
\r
13 public class TickTimer {
\r
15 public void setInterval(int min) { timer_interval = min; }
\r
16 private int timer_interval = 1; // 何分ごとにキックするか
\r
18 public void setDelay(int n) { timer_delay_add = n; }
\r
19 private int timer_delay_add = 100; // 実際には毎分00秒ではなく00.1秒にキックするよ
\r
21 private Timer timer_now = null; // タイマーのオブジェクト
\r
23 private ArrayList<TickTimerListener> listener_list = new ArrayList<TickTimerListener>();
\r
25 private final Boolean foo = true;
\r
28 * 次の00秒までの時間(ミリ秒)を計算する
\r
30 private int getNextDelay() {
\r
31 return timer_interval*60000 - (int) (new Date().getTime() % (long) (timer_interval*60000));
\r
37 public int start() {
\r
38 synchronized ( foo ) {
\r
39 if ( timer_now == null ) {
\r
41 timer_now = new Timer(0, al_nowtimer); // TIMER_INTERVALの値はなんでもいい
\r
42 timer_now.setRepeats(false); // 一回しか実行しないよ
\r
45 int delay = getNextDelay()+timer_delay_add;
\r
46 timer_now.setInitialDelay(delay);
\r
57 public boolean stop() {
\r
58 synchronized ( foo ) {
\r
59 if ( timer_now != null ) {
\r
72 public boolean pause() {
\r
73 synchronized ( foo ) {
\r
74 if ( timer_now != null && timer_now.isRunning() ) {
\r
86 public void addTickTimerRiseListener(TickTimerListener l) {
\r
87 if ( ! listener_list.contains(l) ) {
\r
88 listener_list.add(l);
\r
95 public void removeTickTimerRiseListener(TickTimerListener l) {
\r
96 listener_list.remove(l);
\r
102 private final ActionListener al_nowtimer = new ActionListener() {
\r
104 public void actionPerformed(ActionEvent e) {
\r
108 int delay = start(); // タイマー再起動
\r
109 //System.out.println("Timer Rised: now="+CommonUtils.getDateTimeYMD(ev.getCalendar())+" delay="+delay);
\r
112 private void fireTimerRised() {
\r
113 TickTimerRiseEvent ev = new TickTimerRiseEvent(this);
\r
115 for ( TickTimerListener l : listener_list ) {
\r