سلام
برای پیاده سازی کلاس تایمر بهتره از دو کلاس Date و GeogorianCalender که در پکیج java.util قرار دارند استفاده کنیم.
حالت هایی که این کلاس بهتره داشته باشن عبارتند از:
RESET: تایمر رو صفر میکنه
RUNING: تایمر داره کار میکنه و زمان سپری شده رو اندازه گیری میکنه
STOPPED: تامر متوقف شده
SUSPENDED: تایمر به تعویق افتاده
برای پیاده سازی از یک واسط به نام Korno که خودمون طراحی کردیم استفاده میکنیم.
کدها رو ببنید:
اول کدهای مربوط به واسط:
کد:
interface Korno {
public void reset();
public void start();
public void stop();
public void suspend();
public void resume();
//The spent time in running state
public long getSpentTime();
public int getState();
public static final int RESET = 0;
public static final int RUNING = 1;
public static final int SUSPENDED = 2;
public static final int STOPED = 3;
}
و در انتها کدهای مربوط به کلاس:
کد:
import java.util.*;
public class jcTimer implements Korno{
private int state = RESET;
private long spend = 0;
private Date lastStartTime;
public jcTimer(){
reset();
}
private void setSpend(long time){
spend = time;
}
private long getSpend(){
return spend;
}
private void setLastStartTime(Date myDate){
lastStartTime = myDate;
}
private Date getlastStartTime(){
return lastStartTime;
}
private long getStartTime(){
return getlastStartTime().getTime();
}
private void recordSpendTime(){
Date now = new Date();
long incr = now.getTime() - getStartTime();
setSpend(getSpend() + incr);
}
private void setState(int st){
state = st;
}
public int getState(){
return state;
}
public void reset() {
setState(RESET);
setSpend(0);
}
public void start() {
if (getState() == RESET){
setLastStartTime(new Date());
setState(RUNING);
}
}
public void stop() {
if (getState() == RUNING){
recordSpendTime();
setState(STOPED);
}
else if(getState() == SUSPENDED){
setState(STOPED);
}
}
public void suspend() {
if (getState() == RUNING){
recordSpendTime();
setState(SUSPENDED);
}
}
public void resume() {
if (getState() == SUSPENDED){
setLastStartTime(new Date());
setState(RUNING);
}
}
public long getSpentTime() {
long incr = 0;
if (getState() == RUNING){
Date now = new Date();
incr = now.getTime() - getStartTime();
}
setSpend(getSpend() + incr);
return getSpend();
}
}
این کلاس زمان سپری شده رو بر حسب میلی ثانیه(long) برمیگردونه.
دقت کنید که برای محاسبه زمان سپری شده از کلاس Date استفاده کردم و نیازی به حلقه ها و نخ ها نیست.
موفق باشید