倒记时的初步实现
//接口ClockScreen.java
package test.wkjava;
public interface ClockScreen {
public void showTime(int hour,int min,int sec);
}
//类Clock.java
package test.wkjava;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
public class Clock {
private Timer timer;
private int hour;
private int min;
private int sec;
private long start;
private long end;
private long now;
private long show;
private Collection screens;
private boolean pauseFlag;
public Clock(){
super();
screens = new Vector();
}
public void start(int hour,int min,int sec){
if (isClockRun()){
return;
}
this.hour = hour;
this.min = min;
this.sec = sec;
start = System.currentTimeMillis();
end = start + hour*60*60*1000 + min*60*1000+ sec*1000;
timer = new Timer();
timer.start();
}
private boolean isClockRun() {
return timer != null && timer.isAlive();
}
public void addScreen(ClockScreen screen){
synchronized(screens){
this.screens.add(screen);
}
}
public void removeScreen(ClockScreen screen){
screens.remove(screen);
}
private class Timer extends Thread{
public void run(){
pauseFlag = false;
while(true){
synchronized(screens){
for (Iterator i=screens.iterator();i.hasNext();){
ClockScreen scr = (ClockScreen)i.next();
scr.showTime(hour,min,sec);
}
}
synchronized (Clock.this) {
if (pauseFlag == true)
break;
}
synchronized(Clock.this){
if(hour==0 && min==0 && sec==0)
break;
now = System.currentTimeMillis();
show = end - now;
hour = (int) (show/1000/60/60);
min = (int)((show/1000/60)%60);
sec = (int)((show/1000)%60);
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public synchronized void stop() {
hour = 0;
min = 0;
sec = 0;
}
public void pause() {
synchronized (Clock.this) {
pauseFlag = true;
}
}
public void contine() {
start(hour,min,sec);
}
}
//倒记时实现
package test.wkjava;
public class TestClock {
public TestClock() {
Clock clock = new Clock();
clock.addScreen(new ClockScreen(){
public void showTime(int hour,int min,int sec){
System.out.println(hour+"小时"+min+"分"+sec+"秒");
}
});
clock.start(5,5,5);
}
public static void main(String[] args) {
new TestClock();
}
}
weiking
2006-04-06 13:54:29
评论:2
阅读:462
引用:0
学的马马乎乎
@2006-04-06 17:18:01 weiking
多谢haohao提醒,
这个钟是前几天写的,也写了很长时间,恐怕现在也忘的差不多了,现在在学图形界面,都快晕死.
这个钟是前几天写的,也写了很长时间,恐怕现在也忘的差不多了,现在在学图形界面,都快晕死.
学的不错吗?
@2006-04-06 14:25:52 haohao
学的不错吗?要注意学校数据结构和算法
