1 29 38 39 package org.planetamessenger.system; 40 41 import java.util.*; 42 import java.awt.event.*; 43 44 45 public class JTimer implements Runnable { 46 47 private Thread timerThread = null; 48 private ArrayList<JTimerListener> timerListener = null; 49 private long nIntervalMilli = 1000; 50 private boolean bStopped; 51 52 53 54 59 public JTimer() { 60 61 init(); 62 } 63 64 73 public JTimer( int nIntervalMilli, JTimerListener listener ) { 74 75 this.nIntervalMilli = nIntervalMilli; 76 init(); 77 timerListener.add( listener ); 78 } 79 80 84 void init() { 85 86 bStopped = true; 87 timerListener = new ArrayList<JTimerListener>(); 88 timerThread = new Thread ( this ); 89 } 90 91 95 private synchronized void notifyMainThread() { 96 97 try { 98 System.err.println( "JTimer.notifyMainThread() - Normal Thread exit." ); 99 notifyAll(); 100 } catch( java.lang.IllegalMonitorStateException me ) { 101 System.err.println( "JTimer.notifyMainThread() - " + me ); 102 } 103 } 104 105 109 private void fireActionPerformed() { 110 111 ActionEvent evt = new ActionEvent( this, ActionEvent.ACTION_PERFORMED, "JTimer" ); 112 ArrayList<JTimerListener> clone; 113 114 115 synchronized( this ) { 116 clone = ( ArrayList<JTimerListener> ) timerListener.clone(); 117 } 118 119 if( clone.size() > 0 ) { 121 for( int nCount = 0; nCount < clone.size(); nCount++ ) 122 ( ( JTimerListener ) clone.get( nCount ) ).actionPerformed( evt ); 123 } 124 } 125 126 131 public void setInterval( long nInterval ) { 132 133 nIntervalMilli = nInterval; 134 } 135 136 140 public long getInterval() { 141 142 return nIntervalMilli; 143 } 144 145 149 public synchronized void setActive( boolean bStatus ) { 150 151 if( bStatus ) { 152 if( !timerThread.isAlive() ) { 153 bStopped = false; 154 timerThread.start(); 155 } 156 } 157 else { 158 if( timerThread.isAlive() ) { 159 timerThread.interrupt(); 160 bStopped = true; 161 162 try { 163 wait(); 164 System.err.println( "JTimer.setActive( false ) performed" ); 165 } catch( java.lang.InterruptedException ie ) { 166 System.err.println( "JTimer.setActive( false ) - " + ie ); 167 } catch( java.lang.IllegalMonitorStateException me ) { 168 System.err.println( "JTimer.setActive( false ) - " + me ); 169 } 170 } 171 } 172 } 173 174 177 public boolean getActive() { 178 179 boolean bRet; 180 181 182 bRet = !timerThread.isInterrupted(); 183 184 return bRet; 185 } 186 187 191 public void start() { 192 193 setActive( true ); 194 } 195 196 200 public void stop() { 201 202 setActive( false ); 203 } 204 205 209 public synchronized void addTimerListener( JTimerListener listener ) { 210 211 timerListener.add( listener ); 212 } 213 214 public synchronized void removeTimerListener( JTimerListener listener ) { 215 221 222 timerListener.remove( listener ); 223 } 224 225 229 public void run() { 230 231 while( true ) { 232 try { 233 234 if( bStopped ) 236 break; 237 238 Thread.sleep( nIntervalMilli ); 239 fireActionPerformed(); 240 } catch( InterruptedException e ) { 241 System.err.println( "JTimer.run() - " + e ); 242 break; 243 } 244 } 245 246 notifyMainThread(); 248 } 249 } 250 251 | Popular Tags |