想要实现每隔一段时间,更改界面的参数变量,比如进度条,标签文字更改,都可以用以下方法实现。
用线程实现定时器,传入参数interval为时间间隔,保证程序每隔interval秒执行一次。
public class TaskThread extends Thread{
public ArrayList <MainInfo> list=UI.list;
public int interval;
public TaskThread(int interval) {
this.interval=interval;
}
@Override
public void run() {
try {
Thread.sleep(interval*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在线程外套一层循环,保证每次获得对象后,所作的操作间隔interval时长。
for (int i = 0; i < list.size(); i++) {
MainInfo mi=list.get(i);
System.out.println(mi.toString());
interval=mi.Interval;
label2.setText(mi.StartPoint);
label4.setText(mi.Meridians);
label6.setText(mi.EndPoint);
label7.setText(mi.StartTime);
Date date =new Date(System.currentTimeMillis());
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s= sdf.format(date);
label9.setText(s);
label8.setText(mi.EndTime);
TaskThread tt=new TaskThread(interval);
tt.start();
JProgressBar bar = new JProgressBar(JProgressBar.HORIZONTAL,0,interval);
bar.setBounds(100,150,200,20);
//设置进度条的属性
bar.setBorderPainted(true);//设置进度条边框
panel.add(bar);
for (int j = 0; j <=interval; j++) {
bar.setValue(j);//给进度条赋值
try {
Thread.sleep(1000);//设置睡眠(使进度条每1000ms增加一次)
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
tt.join();
}
其中,list列表中的mi有以下属性:
public class MainInfo {
public String OrderIndex;
public String Meridians;
public String StartPoint;
public String EndPoint;
public int Interval;
public String StartTime;
public String EndTime;
public MainInfo(String OrderIndex,String Meridians,String StartPoint,String EndPoint,int Interval,String StartTime,String EndTime){
this.OrderIndex=OrderIndex;
this.Meridians=Meridians;
this.StartPoint=StartPoint;
this.EndPoint=EndPoint;
this.Interval=Interval;
this.StartTime=StartTime;
this.EndTime=EndTime;
}
@Override
public String toString() {
return "MainInfo [OrderIndex=" + OrderIndex + ", Meridians=" + Meridians + ", StartPoint=" + StartPoint
+ ", EndPoint=" + EndPoint + ", Interval=" + Interval + ", StartTime=" + StartTime + ", EndTime="
+ EndTime + "]";
}
}
打印出来每条是这样
MainInfo [OrderIndex=1.1.1, Meridians=左手太阴肺经, StartPoint=中府, EndPoint=少商, Interval=39, StartTime=3:0:0, EndTime=3:0:38]
包括序号、经脉、起始穴位,终点穴位,持续时间,开始时间,结束时间
主要实现每隔指定时间,更新穴位,开始时间,结束时间,并根据持续时间,实现每秒更新进度条,进度条的总时间长度是持续时间。
当然也可以使用timer和timertask类来实现
1.指定多久之后执行此任务,但只会执行一次,以下实现3s后执行打印操作
public class TimerTest {
Timer timer;
public TimerTest(int time){
timer = new Timer();
timer.schedule(new timerTaskTest(),time*1000);//timer.schedule(执行的方法,延迟多久执行(ms))
}
public static void main(String[] args) {
System.out.println("timer begin...");
new TimerTest(3);
}
class timerTaskTest extends TimerTask{
@Override
public void run() {
System.out.println("time's up!!");
}
}
}
2.在指定的时间执行任务,以下程序实现在一个半小时后执行打印操作
public class TimerTest {
Timer timer;
public TimerTest(){
Date time = getTime();
System.out.println("指定时间time="+time);
timer = new Timer();
timer.schedule(new TimerTaskTest(),time);//timer.schedule(执行的方法,要执行的时间)
}
public Date getTime(){//设置执行时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR,1);
calendar.set(Calendar.MINUTE,30);
calendar.set(Calendar.SECOND,00);
Date time = calendar.getTime();
return time;
}
public static void main(String[] args) {
new TimerTest();
}
class TimerTaskTest1 extends TimerTask{
public void run() {
System.out.println("指定时间执行线程任务...");
}
}
}
3.在延迟指定时间后以指定的间隔时间循环执行定时任务,以下程序实现了每隔2s执行1s程序
public class TimerTest2 {
Timer timer;
public TimerTest2(){
timer = new Timer();
timer.schedule(new TimerTaskTest2(),1000,2000);//tiemr.schedule(执行的方法,延迟时间,多久执行一次)
}
class TimerTaskTest2 extends TimerTask{
@Override
public void run() {
System.out.println("本次任务执行时间"+new Date());
}
}
public static void main(String[] args) {
new TimerTest2();
}
}
以上是定时实现程序的全部内容