经典线程代码

 import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.SimpleDateFormat;
class StopWatch extends Canvas implements Runnable
{
 private long startTime = 0;
 private long endTime = 0;
 private boolean bStart = false; 
 public StopWatch()
 {
  enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  setSize(80,30);
 }
 protected void processMouseEvent(MouseEvent e)
 {
  if(e.getID() == MouseEvent.MOUSE_PRESSED)
  {
/*鼠标按下时,启动计时线程,并让起始时间变量和终止时间变量都等于当前时间*/
   bStart = true;
   startTime = endTime  = System.currentTimeMillis();
   repaint();
   new Thread(this).start();
  }
  else if(e.getID() == MouseEvent.MOUSE_RELEASED)
  {
   /*鼠标释放时,终止计时线程,并重绘窗口表面上的内容*/
   bStart = false;
   repaint();
  }
  super.processMouseEvent(e);
 }
 public void paint(Graphics g)
 {
/*时间值的小时、分钟、秒、都用两位数字显示,
不足两位的部分前面加0,即"HH:mm:ss"这种的格式。*/
  SimpleDateFormat sdf= new SimpleDateFormat("HH:mm:ss");
 /*最刚开始编写这个程序的时候,直接使用elapsedTime.setTime(endTime-startTime);
语句设置elapsedTime时间对象的数字值,从运行结果上发现,即使endTime-startTime等于0,
但elapsedTime显示的时间却不是"00:00:00",而是"08:00:00"。我们曾经讲过,时间在计算机
内存中也是用一个长整数表示的,在这里,我们又发现,即使这个内存中的长整数等于0时,由于
Date类考虑了本地时区问题,所以,其表示的时间就不一定为"零点:零分:零秒"。这里不需要
考虑时区问题,只是借助Date类来帮我们生成"HH:mm:ss"这种时间表示格式。明白这个问题后,
我们就不难想像出,可以先求出显示时间为"00:00:00"的时间对象在内存中对应的那个长整数,
然后在这个基础上加上计时器所记下的时间值,最后就可以显示出我们想要的结果。*/ 
  Date elapsedTime =null;
  try
  {
  elapsedTime= sdf.parse("00:00:00");
  }catch(Exception e){}
  elapsedTime.setTime(endTime - startTime +
 elapsedTime.getTime());
  String display =  sdf.format(elapsedTime);
  g.drawRect(0,0,78,28);
  g.fill3DRect(2,2,75,25,true);
  g.setColor(Color.WHITE);
  g.drawString(display,10,20);
 }
 public void run()
 {
  while(bStart)
  {
   try
   {
   Thread.sleep(500);
   }catch(Exception e){e.printStackTrace();}
   endTime = System.currentTimeMillis();
   repaint();
  }
 }
}
public class TestStopWatch
{
 public static void main(String [] args)
 {
  Frame f =new Frame("StopWatch");
  f.add(new StopWatch());
  f.setSize(200,200);
  f.setVisible(true);
   f.addWindowListener(new WindowAdapter()
   {
public void windowClosing(WindowEvent e)
    {
     System.exit(0);
    }
    });
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值