Topic: 此程序为什么不能正常运行,多谢啦。

  Print this page

1.此程序为什么不能正常运行,多谢啦。 Copy to clipboard
Posted by: 黑骏马
Posted on: 2008-06-19 14:50

题目:一个计时器部件,鼠标在部件上按下时,计时器开始计时,并在部件上显示计时时间,鼠标释放时,计时器停止计时。(其中注释部分是我自已理解的,由于才开始学习JAVA,有些可能是错误的,请凉解)

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.SimpleDateFormat;
class StopWatch extends Canvas implements Runnable
{
private long startTime=0;//定义长整型startTime
private long endTime=0;//定义长整型endTime
private boolean bStart=false;//定义布尔型bStart
public StopWatch()//StopWatch方法
{
enableEvents(AWTEvent.MOUSE_EVENT_MASK);//鼠标事件
setSize(80,30);//设置跑表显示的区域大小
}
protected void processMouseEvent(MouseEvent e)//鼠标活动时间
{
if(e.getID()==MouseEvent.MOUSE_PRESSED)//读取鼠标活动时间
{
bStart=true;//对bStart进行赋值
startTime=endTime=System.currentTimeMillis();//获区当前系统当前时间
repaint();//重新绘制
new Thread(this).start();//初始化线程
}
else if(e.getID()==MouseEvent.MOUSE_RELEASED)//判断鼠标释放时间
{
bStart=false;//鼠标没有释放
repaint();//重新绘制
}
super.processMouseEventEnvelope;//对鼠标事件的处理
}
public void paint(Graphics g)//绘制的方法
{
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");//定义sdf
elapsedTime.setTime(endTime-startTime);
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.RED);//设置时间显示的颜色
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//定义TestStopWatch类
{
  public static void main(String args[])
  {
    Frame f=new Frame("StopWatch");//设置按钮
    f.add(new StopWatch());//添加StopWatch
    f.setSize(200,200);//设置大小
    f.setVisible(true);//显示
     f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)//关闭窗口
{
  System.exit(0);
}
});
}
}

2.Re:此程序为什么不能正常运行,多谢啦。 [Re: 黑骏马] Copy to clipboard
Posted by: billgacsli
Posted on: 2008-06-20 11:02

这标题取得真是…………
按您这源码,编译都编译不了,还说运行

主要就是paint方法,仔细瞅明白了,就是一个时间间隔计算问题
其中的下面这段代码更是画蛇添足,不知道要干嘛

Date elapsedTime=null;//没有释放时间
try
{
elapsedTime=sdf.parse("00:00:00");//读取释放时间
}catch(Exception e){}//异常处理
elapsedTime.setTime(endTime-startTime+
elapsedTime.getTime());//获得释放时间

ps:注释只要针对关键代码就好了。

3.Re:此程序为什么不能正常运行,多谢啦。 [Re: 黑骏马] Copy to clipboard
Posted by: 黑骏马
Posted on: 2008-06-21 09:47

多谢,billgacsli.
上面的程序是张孝祥教程里的一段程序。去掉
elapsedTime.setTime(endTime-startTime);
这一行代码程序就可以正常运行了。
我想程序里的下面这些代码会使程序更加严谨。
Date elapsedTime=null;//没有释放时间
try
{
elapsedTime=sdf.parse("00:00:00");//读取释放时间
}catch(Exception e){}//异常处理
elapsedTime.setTime(endTime-startTime+
elapsedTime.getTime());//获得释放时间


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923