9-低级用户界面及事件处理

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

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

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

资源描述

实验五低级用户界面及事件处理(3)[实验题目]3.使用多线程编写数字时钟[类图结构][程序代码]ClockCanvas.javaimportjava.io.IOException;importjava.util.Calendar;importjava.util.TimeZone;importjava.util.Timer;importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Graphics;importjavax.microedition.lcdui.Image;importjavax.microedition.midlet.MIDletStateChangeException;publicclassClockCanvasextendsCanvasimplementsCommandListener{ClockMIDletclockMIDlet;CommandexitCmd;Timertimer;intnum=1;intright=0;intbottom=0;inttop=0;Imageimage;//低级屏显的构造函数publicClockCanvas(ClockMIDletclockMIDlet){this.clockMIDlet=clockMIDlet;timer=newTimer();exitCmd=newCommand(exit,Command.EXIT,1);this.addCommand(exitCmd);this.setCommandListener(this);newThread(){publicvoidrun(){while(true){try{Thread.sleep(1000);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}repaint();}}}.start();}protectedvoidpaint(Graphicsg){try{image=Image.createImage(/+num+.png);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}num++;if(num=4)num=1;g.setColor(255,255,255);g.fillRect(0,0,240,320);//该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界g.setColor(0,0,0);//写一个白色框,把之前的数据覆盖掉,刷新intx=getWidth()/2;inty=getHeight()/2;intr=100;intlen=10;g.drawArc(x-r,y-r,2*r,2*r,0,360);for(doublei=0;i=2*Math.PI;i=i+2*Math.PI/12){intx1=(int)(x+(r-len)*Math.cos(i));inty1=(int)(y+(r-len)*Math.sin(i));intx2=(int)(x+r*Math.cos(i));inty2=(int)(y+r*Math.sin(i));//表盘上的点的坐标g.drawLine(x1,y1,x2,y2);}TimeZone东8区=TimeZone.getTimeZone(GMT+8);Calendarcalendar=Calendar.getInstance(东8区);inth=calendar.get(Calendar.HOUR);intm=calendar.get(Calendar.MINUTE);ints=calendar.get(Calendar.SECOND);//取时间Stringstr=h+:+m+:+s;g.drawImage(image,x+right,y-top+bottom,Graphics.HCENTER|Graphics.VCENTER);g.drawString(模拟时钟之定时器,80,32,Graphics.BOTTOM|Graphics.LEFT);g.drawString(12,x+8,y-90,Graphics.TOP|Graphics.RIGHT);g.drawString(6,x+4,y+90,Graphics.BOTTOM|Graphics.RIGHT);g.drawString(3,x+86,y+8,Graphics.BOTTOM|Graphics.RIGHT);g.drawString(9,x-86,y+8,Graphics.BOTTOM|Graphics.LEFT);g.drawString(str,x-20,y+50,Graphics.TOP|Graphics.LEFT);doublean=(s*6-90)*Math.PI/180;g.drawLine(x,y,(int)(x+r*Math.cos(an)),(int)(y+r*Math.sin(an)));//数要是整形的,要加(int)}publicvoidcommandAction(Commandc,Displayabled){if(c==exitCmd){try{clockMIDlet.destroyApp(true);}catch(MIDletStateChangeExceptione){e.printStackTrace();}clockMIDlet.notifyDestroyed();}}}ClockMIDlet.javaimportjavax.microedition.lcdui.Display;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;publicclassClockMIDletextendsMIDlet{Displaydisplay;ClockCanvasclockCanvas;publicClockMIDlet(){display=Display.getDisplay(this);clockCanvas=newClockCanvas(this);}protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{//TODOAuto-generatedmethodstub}protectedvoidpauseApp(){//TODOAuto-generatedmethodstub}protectedvoidstartApp()throwsMIDletStateChangeException{display.setCurrent(clockCanvas);//TODOAuto-generatedmethodstub}}[预测结果]程序运行之后出现手机模型,显示一个带有刻度的模拟时钟,并且时钟以正确的时间在工作,背景有几张图片在切换。[实验调试]1出错信息:代码有一部分是参照同学的,所以出现的大多都是这种小错误,因为手打字的错误。2出错信息:3出错信息:[总结思考]3.定时器和多线程在使用上有何区别?答:多个线程是“同时”执行的多个任务;定时可以看作是在本线程内插入的任务。如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。总结:通过本次实验我了解多线程的基本概念,初步掌握了如何使用多线程,知道了线程同步是给一个任务加锁,一个线程执行结束后,另一个线程才可以去执行这个任务。本次实验可以用四种方法来实现,我用的是最简单最灵活的匿名类,先定义一个匿名类,将定义和使用放在一起,通过代码Newthread(){publicvoidrun(){…}}.start;来实现。因为我使用的是匿名类,所以对于外部类和内部类还不能熟悉掌握使用,课下会多看多练习下。

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

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

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

×
保存成功