JAVA线程程序设计(小时钟)实验报告(附完整代码)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

线程程序设计一、课题内容和要求内容:设计和编写一个编写一个指针式时钟程序,应用线程实现时钟的走动。要求:本实验旨在通过实验,培养学生将JAVA线程的相关知识点(包括线程调度,线程同步等)有机结合并加以综合应用,在实验中设计多线程程序的能力。二、设计思路分析classClock:一个指针式时钟的主类classLayout:添加窗口和时钟组件classClockPaint:定义时钟组件三、概要设计publicclassClockextendsJFrame{publicstaticvoidmain(String[]s);}classLayoutextendsJFrame{publicLayout();}classClockPaintextendsJPanelimplementsRunnable{intx,y,r;inth,m,s;doublerad=Math.PI/180;publicClockPaint(intx,inty,intr);publicvoidpaint(Graphicsg);publicvoidrun();}时钟的绘制:运行时钟:四、详细设计importjava.awt.*;importjavax.swing.*;importjava.util.*;publicclassClockextendsJFrame{publicstaticvoidmain(String[]s){newLayout();}}classLayoutextendsJFrame{//添加窗口和时钟组件publicLayout(){ClockPaintcp=newClockPaint(20,20,70);add(cp);setBounds(260,120,200,200);setResizable(false);this.setTitle(指针式时钟);this.setVisible(true);}}classClockPaintextendsJPanelimplementsRunnable{//定义时钟组件intx,y,r;//时钟的位置坐标和半径inth,m,s;//小时,分钟,秒doublerad=Math.PI/180;//定义弧度publicClockPaint(intx,inty,intr){//构造函数this.x=x;this.y=y;this.r=r;Calendarnow=Calendar.getInstance();//初始化日历对象s=now.get(Calendar.SECOND)*6;//获得初始秒转换成度数m=now.get(Calendar.MINUTE)*6;//获得初始分钟转换成度数h=(now.get(Calendar.HOUR_OF_DAY)-12)*30+now.get(Calendar.MINUTE)*6/12;//获得初始小时转换成度数加分钟实现连贯Threadt=newThread(this);//新建线程t.start();//启动线程}publicvoidpaint(Graphicsg){//绘制时钟g.setColor(Color.BLACK);//画背景g.fillRect(0,0,r*3,r*3);g.setColor(Color.WHITE);//画圆g.drawOval(x,y,r*2,r*2);intd=0;//每6度画一个小点intx1,y1,x2,y2;for(inti=0;i60;i++){x1=(int)((r-2)*Math.sin(rad*d));y1=(int)((r-2)*Math.cos(rad*d));g.drawString(.,x+r+x1-1,x+r-y1+1);d+=6;}d=30;//从30度开始每30度画一个数字和一线for(inti=1;i=12;i++){x1=(int)((r-14)*Math.sin(rad*d));y1=(int)((r-14)*Math.cos(rad*d));g.drawString(i+,x+r+x1-4,x+r-y1+5);x1=(int)((r-6)*Math.sin(rad*d));y1=(int)((r-6)*Math.cos(rad*d));x2=(int)((r-2)*Math.sin(rad*d));y2=(int)((r-2)*Math.cos(rad*d));g.drawLine(x+r+x2,y+r-y2,x+r+x1,y+r-y1);d+=30;}g.setColor(Color.RED);//按时间画秒针x1=(int)((0.8*r)*Math.sin(rad*s));y1=(int)((0.8*r)*Math.cos(rad*s));g.drawLine(x+r,y+r,x+r+x1,y+r-y1);g.setColor(Color.BLUE);//按时间画分针x1=(int)((0.6*r)*Math.sin(rad*m));y1=(int)((0.6*r)*Math.cos(rad*m));g.drawLine(x+r,y+r,x+r+x1,y+r-y1);g.setColor(Color.YELLOW);//按时间画时针x1=(int)((0.4*r)*Math.sin(rad*h));y1=(int)((0.4*r)*Math.cos(rad*h));g.drawLine(x+r,y+r,x+r+x1,y+r-y1);g.setColor(Color.GREEN);//显示时间Calendarnow1=Calendar.getInstance();g.drawString(now1.get(Calendar.HOUR_OF_DAY)+:+now1.get(Calendar.MINUTE)+:+now1.get(Calendar.SECOND),0,10);}publicvoidrun(){//运行时钟while(true){try{Thread.sleep(1000);//中断一秒后重新运行}catch(Exceptionex){System.out.println(ex);}s+=6;//秒针走6度if(s=360){//秒针走完一分钟后重置s=0;m+=6;if(m==72||m==144||m==216||m==288){//分针走完5分钟后重置h+=6;}if(m=360){//分针走完一小时后重置m=0;h+=6;}if(h=360){//时针走完12小时后重置h=0;}}this.repaint();//重新绘制时钟}}}五、测试数据及其结果分析1时钟界面:2结果:输出正常。六、调试过程中的问题一开始没有考虑分钟走五分钟时针应走一小格,在参考机械时钟的设计后,实现了时钟的连贯走动。七、程序设计总结1、通过该实验掌握了应用线程实现时钟的走动的方法。2、学会了编写时钟的算法、多线程的设计与使用。3、在逐步地优化和调试中实现了一个较切合实际的时钟界面。

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功