package com.talk.demo; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; import java.util.Vector; public class CloudKite implements Runnable { public static interface taskListener { void onProgressChanged(final int progress); } private String desc; private int progress; private int interval; private String done_time; private Vector<CloudKite.taskListener> listenerList; public CloudKite(String desc, int val, String done) { progress=0; listenerList=new Vector<CloudKite.taskListener>(); this.desc=desc; interval = val; done_time = done; } @Override public void run() { Random random = new Random(); try { progress = measureProgress(); setProgress(progress); Thread.sleep(random.nextInt(9)*1000); while(progress < 100) { Thread.sleep(1000); progress = measureProgress(); setProgress(progress); } } catch (InterruptedException e) { setProgress(0); } catch (Exception generalEcc) { setProgress(0); } finally { Thread.interrupted(); } } private int measureProgress() { int result = progress; Calendar calendar = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss"); Date date = new Date(); try { Date recordDate = formatter.parse(done_time); long diff = recordDate.getTime() - date.getTime(); if (diff < 0 || diff == 0) { result = 100; return result; } result = (interval-(int)diff)/interval * 100; return result; } catch (Exception e) { e.printStackTrace(); } return result; } public void addListener(taskListener l) { listenerList.add(l); } public void removeListener(taskListener l){ listenerList.remove(l); } public int getProgress() { return progress > 100 ? 100 : progress; } private void setProgress(int progress) { this.progress = progress > 100 ? 100 : progress; if (!listenerList.isEmpty()) { for (CloudKite.taskListener listener : listenerList) listener.onProgressChanged(this.progress); } } private void incrementProgress(int increment) { setProgress(this.progress + increment); } public String getDesc() { return desc; } }