翻译文献-简单的动画及其实现_第1页
翻译文献-简单的动画及其实现_第2页
翻译文献-简单的动画及其实现_第3页
翻译文献-简单的动画及其实现_第4页
翻译文献-简单的动画及其实现_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

外文原文SIMPLEANIMATIONANDTHREADSTHEFIRSTTHINGIEVERSAWJAVADOWASANANIMATIONALARGERED“HITHERE”THATRANACROSSTHESCREENFROMTHERIGHTTOLEFTEVENTHATSIMPLEFORMOFANIMATIONWASENOUGHTOMAKEMESTOPANDTHINK,“THISISREALLYCOOL”THATSORTOFSIMPLEANIMATIONTAKESONLYAFEWMETHODSTOIMPLEMENTINJAVA,BUTTHOSEFEWMETHODSARETHEBASISFORANYJAVAAPPLETTHATYOUWANTTOUPDATETHESCREENDYNAMICALLYSTARTINGWITHSIMPLEANIMATIONSISAGOODWAYTOBUILDUPTOTHEMORECOMPLICATEDAPPLETSTODAY,YOULLLEARNTHEFUNDAMENTALSOFANIMATIONINJAVAHOWTHEVARIOUSPARTSOFTHESYSTEMALLWORKTOGETHERSOTHATYOUCANCREATEMOVINGFIGURESANDDYNAMICUPDATEABLEAPPLETSSPECIFICALLY,YOULLEXPLORETHEFOLLOWINGHOWJAVAANIMATIONSWORKTHEPAINTANDREPAINTMETHODS,STARTINGANDSTOPPINGDYNAMICAPPLETS,ANDHOWTOUSEANDOVERRIDETHESEMETHODSINYOUROWNAPPLETSTHREADSWHATTHEYAREANDHOWTHEYCANMAKEYOURAPPLETSMOREWELLBEHAVEDWITHOTHERAPPLETSANDWITHTHEJAVASYSTEMINGENERALREDUCINGANIMATIONFLICKER,ACOMMONPROBLEMWITHANIMATIONINJAVATHROUGHOUTTODAY,YOULLALSOWORKWITHLOTSOFEXAMPLESOFREALAPPLETSTHATCREATEANIMATIONSORPERFORMSOMEKINDOFDYNAMICMOVEMENTCREATINGANIMATIONINJAVAANIMATIONINJAVAINVOLVESTWOSTEPSCONSTRUCTINGAFRAMEOFANIMATION,ANDTHENASKINGJAVATOPAINTTHATFRAMEREPEATASNECESSARYTOCREATETHEILLUSIONOFMOVEMENTTHEBASIC,STATICAPPLETSTHATYOUCREATEDYESTERDAYTAUGHTYOUHOWTOACCOMPLISHTHEFIRSTPARTALLTHATSLEFTISHOWTOTELLJAVATOPAINTAFRAMEPAINTINGANDREPAINTINGTHEPAINTMETHOD,ASYOULEARNEDYESTERDAY,ISCALLEDBYJAVAWHENEVERTHEAPPLETNEEDSTOBEPAINTEDWHENTHEAPPLETISINITIALLYDRAWN,WHENTHEWINDOWCONTAININGITISMOVED,ORWHENANOTHERWINDOWISMOVEDFROMOVERITYOUCANALSO,HOWEVER,ASKJAVATOREPAINTTHEAPPLETATATIMEYOUCHOOSESO,TOCHANGETHEAPPEARANCEOFWHATISONTHESCREEN,YOUCONSTRUCTTHEIMAGEOR“FRAME”YOUWANTTOPAINT,ANDTHENASKJAVATOPAINTTHISFRAMEIFYOUDOTHISREPEATEDLY,ANDFASTENOUGH,YOUGETANIMATIONINSIDEYOURJAVAAPPLETTHATSALLTHEREISTOITWHEREDOESALLTHISTAKEPLACENOTINTHEPAINTMETHODITSELFALLPAINTDOESISPUTDOTSONTHESCREENPAINT,INOTHERWORDS,ISRESPONSIBLEONLYFORTHECURRENTFRAMEOFTHEANIMATIONATATIMETHEREALWORKOFCHANGINGWHATPAINTDOES,OFMODIFYINGTHEFRAMEFORANANIMATION,ACTUALLYOCCURSSOMEWHEREELSEINTHEDEFINITIONOFYOURAPPLETINTHAT“SOMEWHEREELSE,”YOUCONSTRUCTTHEFRAMESETVARIABLESFORPAINTTOUSE,CREATECOLORORFONTOROTHEROBJECTSTHATPAINTWILLNEED,ANDTHENCALLTHEREPAINTMETHODREPAINTISTHETRIGGERTHATCAUSESJAVATOCALLPAINTANDCAUSESYOURFRAMETOGETDRAWNTECHNICALNOTEBECAUSEAJAVAAPPLETCANCONTAINMANYDIFFERENTCOMPONENTSTHATALLNEEDTOBEPAINTEDASYOULLLEARNLATERONTHISWEEK,ANDINFACT,APPLETSAREEMBEDDEDINSIDEALARGERJAVAAPPLICATIONTHATALSOPAINTSTOTHESCREENINSIMILARWAYS,WHENYOUCALLREPAINTANDTHEREFOREPAINTYOURENOTACTUALLYIMMEDIATELYDRAWINGTOTHESCREENASYOUDOINOTHERWINDOWORGRAPHICSTOOLKITSINSTEAD,REPAINTISAREQUESTFORJAVATOREPAINTYOURAPPLETASSOONASITCANMUCHOFTHETIME,THEDELAYBETWEENTHECALLANDTHEACTUALREPAINTISNEGLIGIBLESTARTINGANDSTOPPINGANAPPLETSEXECUTIONREMEMBERSTARTANDSTOPFROMDAY8THESEARETHEMETHODSTHATTRIGGERYOURAPPLETTOSTARTANDSTOPRUNNINGYOUDIDNTUSESTARTANDSTOPYESTERDAY,BECAUSETHEAPPLETSONTHATDAYDIDNOTHINGEXCEPTPAINTONCEWITHANIMATIONSANDOTHERJAVAAPPLETSTHATAREACTUALLYPROCESSINGANDRUNNINGOVERTIME,YOULLNEEDTOMAKEUSEOFSTARTANDSTOPTOTRIGGERTHESTARTOFYOURAPPLETSEXECUTION,ANDTOSTOPITFROMRUNNINGWHENYOULEAVETHEPAGETHATCONTAINSTHATAPPLETFORMOSTAPPLETS,YOULLWANTTOOVERRIDESTARTANDSTOPFORJUSTTHISREASONTHESTARTMETHODTRIGGERSTHEEXECUTIONOFTHEAPPLETYOUCANEITHERDOALLTHEAPPLETSWORKINSIDETHATMETHOD,ORYOUCANCALLOTHEROBJECTSMETHODSINORDERTODOSOUSUALLY,STARTISUSEDTOCREATEANDBEGINEXECUTIONOFATHREADSOTHEAPPLETCANRUNINITSOWNTIMESTOP,ONTHEOTHERHAND,SUSPECTSANAPPLETSEXECUTIONSOWHENYOUMOVEOFFTHEPAGEONWHICHTHEAPPLETISDISPLAYING,ITDOESNTKEEPRUNNINGANDUSINGUPSYSTEMRESOURCESMOSTOFTHETIMEWHENYOUCREATEASTARTMETHOD,YOUSHOULDALSOCREATEACORRESPONDINGSTOPPUTTINGITTOGETHEREXPLAININGHOWTODOJAVAANIMATIONINTEXTISMOREOFATASKTHANACTUALLYSHOWINGYOUHOWITWORKSINCODEANEXAMPLEORTWOWILLHELPMAKETHERELATIONSHIPBETWEENALLTHESEMETHODSCLEARERLISTING101SHOWSASAMPLEAPPLETTHAT,ATFIRSTGLANCE,USESBASICAPPLETANIMATIONTODISPLAYTHEDATEANDTIMEANDCONSTANTLYUPDATESITEVERYSECOND,CREATINGAVERYSIMPLEANIMATEDDIGITALCLOCKAFRAMEFROMTHATCLOCKISSHOWNINFIGURE101THEWORDS“ATFIRSTGLANCE”INTHEPREVIOUSPARAGRAPHAREVERYIMPORTANTTHISAPPLETDOESNTWORKHOWEVER,DESPITETHEFACTTHATITDOESNTWORK,YOUCANSTILLLEARNALOTABOUTBASICANIMATIONWITHIT,SOWORKINGTHROUGHTHECODEWILLSTILLBEVALUABLEINTHENEXTSECTION,YOULLLEARNJUSTWHATSWRONGWITHITSEEWHETHERYOUCANFIGUREOUTWHATSGOINGONWITHTHISCODEBEFOREYOUGOONTOTHEANALYSISTYPELISTING101THEDATEAPPLET1IMPORTJAVAAWTGRAPHICS2IMPORTJAVAAWTFONT3IMPORTJAVAUTILDATE45PUBLICCLASSDIGITALCLOCKEXTENDSJAVAAPPLETAPPLET67FONTTHEFONTNEWFONT“TIMESROMAN”,FONTBOLD,248DATETHEDATE910PUBLICVOIDSTART11WHILETRUE12THEDATENEWDATE13REPAINT14TRYTHREADSLEEP100015CATCHINTERRUPTEDEXCEPTIONE16171819PUBLICVOIDPAINTGRAPHICSG20GSETFONTTHEFONT21GDRAWSTRINGTHEDATETOSTRING,10,502223FIGURE101THEDIGITALCLOCKANALYSISTHINKYOUVEGOTTHEBASICIDEALETSGOTHROUGHIT,LINEBYLINELINES7AND8DEFINETWOBASICINSTANCEVARIABLESTHEFONTANDTHEDATE,WHICHHOLDOBJECTSREPRESENTINGTHECURRENTFONTANDTHECURRENTDATE,RESPECTIVELYMOREABOUTTHESELATERTHESTARTMETHODTRIGGERSTHEACTUALEXECUTIONOFTHEAPPLETNOTETHEWHILELOOPINSIDETHISMETHODGIVENTHATTHETESTTRUEALWAYSRETURNSTRUE,THELOOPNEVEREXITSASINGLEANIMATIONFRAMEISCONSTRUCTEDINSIDETHATWHILELOOP,WITHTHEFOLLOWINGSTEPSTHEDATECLASSREPRESENTSADATEANDTIMEDATEISPARTOFTHEJAVAUTILPACKAGENOTETHATITWASSPECIFICALLYIMPORTEDINLINETHREELINE12CREATESANEWINSTANCEOFTHEDATECLASS,WHICHHOLDSTHECURRENTDATEANDTIME,ANDASSIGNSITTOTHETHEDATEINSTANCEVARIABLETHEREPAINTMETHODISCALLEDLINES14AND15,ASCOMPLICATEDASTHEYLOOK,DONOTHINGEXCEPTPAUSEFOR1000MILLISECONDSONESECONDBEFORETHELOOPREPEATSTHESLEEPMETHODTHERE,PARTOFTHETHREADCLASS,ISWHATCAUSESTHEAPPLETTOPAUSEWITHOUTASPECIFICSLEEPMETHOD,THEAPPLETWOULDRUNASFASTASITPOSSIBLYCOULD,WHICH,FORFASTERCOMPUTERSYSTEMS,MIGHTBETOOFASTFORTHEEYETOSEEUSINGSLEEPENABLESYOUTOCONTROLEXACTLYHOWFASTTHEANIMATIONTAKESPLACETHETRYANDCATCHSTUFFAROUNDITENABLESJAVATOMANAGEERRORSIFTHEYOCCURTRYANDCATCHARECALLEDEXCEPTIONSANDAREDESCRIBEDONDAY18,NEXTWEEKONTOTHEPAINTMETHODHERE,INSIDEPAINT,ALLTHATHAPPENSISTHATTHECURRENTFONTINTHEVARIABLETHEFONTISSET,ANDTHEDATEITSELFISPRINTEDTOTHESCREENNOTETHATYOUHAVETOCALLTHETOSTRINGMETHODTOCONVERTTHEDATETOASTRINGBECAUSEPAINTISCALLEDREPEATEDLYWITHWHATEVERVALUEHAPPENSTOBEINTHEDATE,THESTRINGISUPDATEDEVERYSECONDTOREFLECTTHENEWDATETHEREAREAFEWTHINGSTONOTEABOUTTHISEXAMPLEFIRST,YOUMIGHTTHINKITWOULDBEEASIERTOCREATETHENEWDATEOBJECTINSIDETHEPAINTMETHODTHATWAYYOUCOULDUSEALOCALVARIABLEANDNOTNEEDANINSTANCEVARIABLETOPASSTHEDATEOBJECTAROUNDALTHOUGHDOINGTHINGSTHATWAYCREATESCLEANERCODE,ITALSORESULTSINALESSEFFICIENTPROGRAMTHEPAINTMETHODISCALLEDEVERYTIMEAFRAMENEEDSTOBECHANGEDINTHISCASE,ITSNOTTHATIMPORTANT,BUTINANANIMATIONTHATNEEDSTOCHANGEFRAMESVERYQUICKLY,THEPAINTMETHODHASTOPAUSETOCREATETHATNEWOBJECTEVERYTIMEBYLEAVINGPAINTTODOWHATITDOESBESTPAINTINGTHESCREENANDCALCULATINGNEWOBJECTSBEFOREHAND,YOUCANMAKEPAINTINGASEFFICIENTASPOSSIBLETHISISPRECISELYTHESAMEREASONWHYTHEFONTOBJECTISALSOINANINSTANCEVARIABLETHREADSWHATTHEYAREANDWHYYOUNEEDTHEMDEPENDINGONYOUREXPERIENCEWITHOPERATINGSYSTEMSANDWITHENVIRONMENTSWITHINTHOSESYSTEMS,YOUMAYORMAYNOTHAVERUNINTOTHECONCEPTOFTHREADSLETSSTARTFROMTHEBEGINNINGWITHSOMEDEFINITIONSWHENAPROGRAMRUNS,ITSTARTSEXECUTING,RUNSITSINITIALIZATIONCODE,CALLSMETHODSORPROCEDURES,ANDCONTINUESRUNNINGANDPROCESSINGUNTILITSCOMPLETEORUNTILTHEPROGRAMISEXITEDTHATPROGRAMUSESASINGLETHREADWHERETHETHREADISASINGLELOCUSOFCONTROLFORTHEPROGRAMMULTITHREADING,ASINJAVA,ENABLESSEVERALDIFFERENTEXECUTIONTHREADSTORUNATTHESAMETIMEINSIDETHESAMEPROGRAM,INPARALLEL,WITHOUTINTERFERINGWITHEACHOTHERHERESASIMPLEEXAMPLESUPPOSEYOUHAVEALONGCOMPUTATIONNEARTHESTARTOFAPROGRAMSEXECUTIONTHISLONGCOMPUTATIONMAYNOTBENEEDEDUNTILLATERONINTHEPROGRAMSEXECUTIONITSACTUALLYTANGENTIALTOTHEMAINPOINTOFTHEPROGRAM,BUTITNEEDSTOGETDONEEVENTUALLYINASINGLETHREADEDPROGRAM,YOUHAVETOWAITFORTHATCOMPUTATIONTOFINISHBEFORETHERESTOFTHEPROGRAMCANCONTINUERUNNINGINAMULTITHREADEDSYSTEM,YOUCANPUTTHATCOMPUTATIONINTOITSOWNTHREAD,ENABLINGTHERESTOFTHEPROGRAMTOCONTINUERUNNINGINDEPENDENTLYUSINGTHREADSINJAVA,YOUCANCREATEANAPPLETSOTHATITRUNSINITSOWNTHREAD,ANDITWILLHAPPILYRUNALLBYITSELFWITHOUTINTERFERINGWITHANYOTHERPARTOFTHESYSTEMUSINGTHREADS,YOUCANHAVELOTSOFAPPLETSRUNNINGATONCEONTHESAMEPAGEDEPENDINGONHOWMANYYOUHAVE,YOUMAYEVENTUALLYEXHAUSTTHESYSTEMSOTHATALLOFTHEMWILLRUNSLOWER,BUTALLOFTHEMWILLRUNINDEPENDENTLYEVENIFYOUDONTHAVELOTSOFAPPLETS,USINGTHREADSINYOURAPPLETSISGOODJAVAPROGRAMMINGPRACTICETHEGENERALRULEOFTHUMBFORWELLBEHAVEDAPPLETSWHENEVERYOUHAVEANYBITOFPROCESSINGTHATISLIKELYTOCONTINUEFORALONGTIMESUCHASANANIMATIONLOOP,ORABITOFCODETHATTAKESALONGTIMETOEXECUTE,PUTITINATHREADTHEPROBLEMWITHTHEDIGITALCLOCKAPPLETTHATDIGITALCLOCKAPPLETINTHELASTSECTIONDOESNTUSETHREADSINSTEAD,YOUPUTTHEWHILELOOPTHATCYCLESTHROUGHTHEANIMATIONDIRECTLYINTOTHESTARTMETHODSOTHATWHENTHEAPPLETSTARTSRUNNINGITKEEPSGOINGUNTILYOUQUITTHEBROWSERORAPPLETVIEWERALTHOUGHTHISMAYSEEMLIKEAGOODWAYTOAPPROACHTHEPROBLEM,THEDIGITALCLOCKWONTWORKBECAUSETHEWHILELOOPINTHESTARTMETHODISMONOPOLIZINGALLTHERESOURCESINTHESYSTEMINCLUDINGPAINTINGIFYOUTRYCOMPILINGANDRUNNINGTHEDIGITALCLOCKAPPLET,ALLYOUGETISABLANKSCREENYOUALSOWONTBEABLETOSTOPTHEAPPLET,BECAUSETHERESNOWAYASTOPMETHODCANEVERBECALLEDTHESOLUTIONTOTHISPROBLEMISTOREWRITETHEAPPLETTOUSETHREADSTHREADSENABLETHISAPPLETTOANIMATEONITSOWNWITHOUTINTERFERINGWITHOTHERSYSTEMOPERATIONS,ENABLEITTOBESTARTEDANDSTOPPED,ANDENABLEYOUTORUNITINPARALLELWITHOTHERAPPLETSWRITINGAPPLETSWITHTHREADSHOWDOYOUCREATEANAPPLETTHATUSESTHREADSTHEREARESEVERALTHINGSYOUNEEDTODOFORTUNATELY,NONEOFTHEMAREDIFFICULT,ANDALOTOFTHEBASICSOFUSINGTHREADSINAPPLETSISJUSTBOILERPLATECODETHATYOUCANCOPYANDPASTEFROMONEAPPLETTOANOTHERBECAUSEITSSOEASY,THERESALMOSTNOREASONNOTTOUSETHREADSINYOURAPPLETS,GIVENTHEBENEFITSTHEREAREFOURMODIFICATIONSYOUNEEDTOMAKETOCREATEANAPPLETTHATUSESTHREADSCHANGETHESIGNATUREOFYOURAPPLETCLASSTOINCLUDETHEWORDSIMPLEMENTSRUNNABLEINCLUDEANINSTANCEVARIABLETOHOLDTHISAPPLETSTHREADMODIFYYOURSTARTMETHODTODONOTHINGBUTSPAWNATHREADANDSTARTITRUNNINGCREATEARUNMETHODTHATCONTAINSTHEACTUALCODETHATSTARTSYOURAPPLETRUNNINGTHEFIRSTCHANGEISTOTHEFIRSTLINEOFYOURCLASSDEFINITIONYOUVEALREADYGOTSOMETHINGLIKETHISPUBLICCLASSMYAPPLETCLASSEXTENDSJAVAAPPLETAPPLETYOUNEEDTOCHANGEITTOTHEFOLLOWINGIVEPUTITONTWOLINESSOITLLFITONTHISPAGEITCANBEEITHERLIKETHISORONONELINEDEPENDINGONYOURPREFERENCEPUBLICCLASSMYAPPLETCLASSEXTENDSJAVAAPPLETAPPLETIMPLEMENTSRUNNABLEWHATDOESTHISDOITINCLUDESSUPPORTFORTHERUNNABLEINTERFACEINYOURAPPLETIFYOUTHINKWAYBACKTODAY2,YOULLREMEMBERTHATINTERFACESAREAWAYTOCOLLECTMETHODNAMESCOMMONTODIFFERENTCLASSES,WHICHCANTHENBEMIXEDINANDIMPLEMENTEDINSIDEDIFFERENTCLASSESTHATNEEDTOIMPLEMENTTHATBEHAVIORHERE,THERUNNABLEINTERFACEINCLUDESTHEBEHAVIORYOURAPPLETNEEDSTORUNATHREADINPARTICULAR,ITGIVESYOUADEFAULTDEFINITIONFORTHERUNMETHODTHESECONDSTEPISTOADDANINSTANCEVARIABLETOHOLDTHISAPPLETSTHREADCALLITANYTHINGYOULIKEITSAVARIABLEOFTHETYPETHREADTHREADISACLASSINJAVALANG,SOYOUDONTHAVETOIMPORTITTHREADRUNNERTHIRD,ADDASTARTMETHODORMODIFYTHEEXISTINGONESOTHATITDOESNOTHINGBUTCREATEANEWTHREADANDSTARTITRUNNINGHERESATYPICALEXAMPLEOFASTARTMETHODPUBLICVOIDSTARTIFRUNNERNULLRUNNERNEWTHREADTHISRUNNERSTARTIFYOUMODIFYSTARTTODONOTHINGBUTSPAWNATHREAD,WHEREDOESTHEBODYOFYOURAPPLETGOITGOESINTOANEWMETHOD,RUN,WHICHLOOKSLIKETHISPUBLICVOIDRUN/WHATYOURAPPLETACTUALLYDOESRUNCANCONTAINANYTHINGYOUWANTTORUNINTHESEPARATETHREADINITIALIZATIONCODE,THEACTUALLOOPFORYOURAPPLET,ORANYTHINGELSETHATNEEDSTORUNINITSOWNTHREADYOUALSOCANCREATENEWOBJECTSANDCALLMETHODSFROMINSIDERUN,ANDTHEYLLALSORUNINSIDETHATTHREADTHERUNMETHODISTHEREALHEARTOFYOURAPPLETFINALLY,NOWTHATYOUVEGOTTHREADSRUNNINGANDASTARTMETHODTOSTARTTHEM,YOUSHOULDADDASTOPMETHODTOSUSPENDEXECUTIONOFTHATTHREADANDTHEREFOREWHATEVERTHEAPPLETISDOINGATTHETIMEWHENTHEREADERLEAVESTHEPAGESTOP,LIKESTART,ISUSUALLYSOMETHINGALONGTHESELINESPUBLICVOIDSTOPIFRUNNERNULLRUNNERSTOPRUNNERNULLTHESTOPMETHODHEREDOESTWOTHINGSITSTOPSTHETHREADFROMEXECUTINGANDALSOSETSTHETHREADSVARIABLERUNNERTONULLSETTINGTHEVARIABLETONULLMAKESTHETHREADOBJECTITPREVIOUSLYCONTAINEDAVAILABLEFORGARBAGECOLLECTIONSOTHATTHEAPPLETCANBEREMOVEDFROMMEMORYAFTERACERTAINAMOUNTOFTIMEIFTHEREADERCOMESBACKTOTHISPAGEANDTHISAPPLET,THESTARTMETHODCREATESANEWTHREADANDSTARTSUPTHEAPPLETONCEAGAINANDTHATSITFOURBASICMODIFICATIONS,ANDNOWYOUHAVEAWELLBEHAVEDAPPLETTHATRUNSINITSOWNTHREADFIXINGTHEDIGITALCLOCKREMEMBERTHEPROBLEMSYOUHADWITHTHEDIGITALCLOCKAPPLETATTHEBEGINNINGOFTHISSECTIONLETSFIXTHEMSOYOUCANGETANIDEAOFHOWAREALAPPLETWITHTHREADSLOOKSYOULLFOLLOWTHEFOURSTEPSOUTLINEDINTHEPREVIOUSSECTIONFIRST,MODIFYTHECLASSDEFINITIONTOINCLUDETHERUNNABLEINTERFACETHECLASSISRENAMEDTODIGITALTHREADSINSTEADOFDIGITALCLOCKPUBLICCLASSDIGITALTHREADSEXTENDSJAVAAPPLETAPPLETIMPLEMENTSRUNNABLESECOND,ADDANINSTANCEVARIABLEFORTHETHREADTHREADRUNNERFORTHETHIRDSTEP,SWAPTHEWAYYOUDIDTHINGSBECAUSETHEBULKOFTHEAPPLETISCURRENTLYINAMETHODCALLEDSTART,BUTYOUWANTITTOBEINAMETHODCALLEDRUN,RATHERTHANDOALOTOFCOPYINGANDPASTING,JUSTRENAMETHEEXISTINGSTARTTORUNPUBLICVOIDRUNWHILETRUEFINALLY,ADDTHEBOILERPLATESTARTANDSTOPMETHODSPUBLICVOIDSTARTIFRUNNERNULLRUNNERNEWTHREADTHISRUNNERSTARTPUBLICVOIDSTOPIFRUNNERNULLRUNNERSTOPRUNNERNULLYOUREFINISHEDONEAPPLETCONVERTEDTOUSETHREADSINLESSTHANAMINUTEFLATTHECODEFORTHEFINALAPPLETAPPEARSINLISTING102TYPELISTING102THEFIXEDDIGITALCLOCKAPPLET1IMPORTJAVAAWTGRAPHICS2IMPORTJAVAAWTFONT3IMPORTJAVAUTILDATE45PUBLICCLASSDIGITALTHREADSEXTENDSJAVAAPPLETAPPLET6IMPLEMENTSRUNNABLE78FONTTHEFONTNEWFONT“TIMESROMAN”,FONTBOLD,249DATETHEDATE10THREADRUNNER1112PUBLICVOIDSTART13IFRUNNERNULL14RUNNERNEWTHREADTHIS15RUNNERSTART16171819PUBLICVOIDSTOP20IFRUNNERNULL21RUNNERSTOP22RUNNERNULL23242526PUBLICVOIDRUN27WHILETRUE28THEDATENEWDATE29REPAINT30TRYTHREADSLEEP100031CATCHINTERRUPTEDEXCEPTIONE32333435PUBLICVOIDPAINTGRAPHICSG36GSETFONTTHEFONT37GDRAWSTRINGTHEDATETOSTRING,10,50383940REDUCINGANIMATIONFLICKERIFYOUVEBEENFOLLOWINGALONGWITHTHISBOOKANDTRYINGTHEEXAMPLESASYOUGO,RATHERTHANREADINGTHISBOOKONTHEAIRPLANEORINTHEBATHTUB,YOUMAYHAVENOTICEDTHATWHENTHEDATEPROGRAMRUNSEVERYONCEINAWHILE,THERESANANNOYINGFLICKERINTHEANIMATIONNOTTHATTHERESANYTHINGWRONGWITHREADINGTHISBOOKINTHEBATHTUB,BUTYOUWONTSEETHEFLICKERIFYOUDOTHAT,SOJUSTTRUSTMETHERESAFLICKERTHISISNTAMISTAKEORANERRORINTHEPROGRAMINFACT,THATFLICKERISASIDEEFFECTOFCREATINGANIMATIONSINJAVABECAUSEITISREALLYANNOYING,HOWEVER,YOULLLEARNHOWTOREDUCEFLICKERINTHISPARTOFTODAYSLESSONSOTHATYOURANIMATIONSRUNCLEANERANDLOOKBETTERONTHESCREEN中文翻译简单的动画及其实现我所见的使用JAVA做的第一个工作是一个动画一个用很大的红色字体所写的“HITHERE”从屏幕的左边移动到屏幕的右边。即使这样简单的动画也足够使得我停下来并进行思考,“这确实够酷的”。只有少数几种方法可以用来在JAVA中执行这种简单的动画,但这些简单方法是任何你想动态的更新屏的JAVA程序的基础。从这个简单的动画开始学习JAVA是建构更加复杂的程序的一个好方法。现在你将学习在JAVA中实现动画的基础系统中各个部分是如何统一工作以使得你能够创建移动的图片和动态的可升级的程序。具体地说,你将探索以下部分JAVA的动画是如何工作的PAINT和REPAINT方法,开始和结束动态的程序,如何使用和忽略在你自己的程序中的这些方法。减少JAVA动画中的闪烁,和一些常见问题。你将参与很多创建动画和操作某种动作的实际程序的很多例子的工作。在JAVA中创建动画在JAVA中创建动画包括两个步骤创建一个动画的框架,并且要求JAVA向此框架内绘画。如果需要可重复操作来创建动作的形态。上一次你所创建的基础的,静态的程序教会你如何完成第一部分;那么剩下来的就是如何告诉JAVA如何在此框架中绘画。PAINTING和REPAINTINGPAINT方法,就像你上次学到的,当APPLET第一次被调用,当包含它的窗口被移动,或者当另一个窗口从它之上被移走的条件下,无论何时APPLET需要被绘画都将被JAVA调用。然而你同样可以按照自己的选择让JAVA启动REPAINT程序。所以为了改变在屏幕中的外观,你需要建造图像或则你想要描绘的框架,并且让JAVA绘制这个画面。如果你重复这样操作,并且足够快,你便可以在你的JAVA程序中得到动画。所有这些将在哪里发生呢并不是在PAINT方法的自身中。所有的PAINT操作是在屏幕上打点。PAINT,换句话说只是为一次性的动画的当前画面负责。改变PAINT操作及为一个动画修饰画面的实际工作实际上发生在你的程序的定义的其他什么地方。(在所谓的其它什么地方,你创建了画面为PAINT设置变量,创建颜色或则字体,及PAINT需要的对象),并且调用REPAINT方法。REPAINT是导致JAVA调用PAINT并关闭你的画面的触发。技术注释因为一个JAVAAPPLET能够包含很多需要被描绘的组件,并且事实上,APPLETS被嵌入在一个大的JAVA的应用之中,此应用将用同样的方法在屏幕中绘图,当你调用REPAINT时你其实并不是立刻就在屏幕上按照你在其它窗口或则绘图工具栏所做的那样。相反,REPAINT是一个对于JAVA来说尽可能快的重新绘制你的APPLET的请求。大多数情况下,在调用命令和实际的REPAINT之间的时延时是可忽略的。开始并停止一个程序的执行记得在第八天所说的START和STOP命令吗它们是能够触发你的程序开始及停止运行的方法。上一次你并没有使用START和STOP命令,因为那次的APPLET除了一次性的PAINT之外并没有做其它工作。在动画及JAVA的其它程序运行的过程中,你将需要利用START和STOP命令去触发你的程序执行的开始以及在你想离开包含APPLET的页面时停止程序的运行。对于大多数的APPLET中,为此原因你将希望不考虑START及STOP命令。START命令触发APPLET的执行。你可以在此命令中做所有APPLET的工作,或则可以调用其它对象的命令。通常,START被用来创建并开始一个思路的执行为的是APPLET可以在它自己的时间内运行。另一方面,STOP停止一个程序的执行当你移开正在显示的APPLET的页时,STOP并不持续运行并使用系统资源。大多数的情况下在你创造一个START的同时,你同样也应该创建一个相应的STOP。把它放在一起用语言解释JAVA是如何做一个动画的不仅仅是表现出它在编码上是如何实现的。一两个例子可使得所有这些命令的关系更清楚。列表101显示了一个例子APPLET,这个APPLET使用基础的动画显示了日期和时间并持续的以一秒的时间间隔更新此状态,这个例子创建了一个很简单的动画数字时钟,这个时钟的画面显示于FIGURE101。在前面的段落中“ATFIRSTGLANCE”是非常重要的这个APPLET确实工作然而,即使它不工作,你仍然能够学到基本的动画的很多东西,所以此编码的学习仍是有价值的。在下一段中,你将要学习还有什么问题。看一下在你继续分析此编码的同时能够考虑出将会发生什么。列表101这个APPLETIMPORTJAVAAWTGRAPHICSIMPORTJAVAAWTFONTIMPORTJAVAUTILDATEPUBLICCLASSDIGITALCLOCKEXTENDSJAVAAPPLETAPPLETFONTTHEFONTNEWFONT“TIMESROMAN”,FONTBOLD,24DATETHEDATEPUBLICVOIDSTARTWHILETRUETHEDATENEWDATEREPAINTTRYTHREADSLEEP1000CATCHINTERRUPTEDEXCEPTIONEPUBLICVOIDPAINTGRAPHICSGGSETFONTTHEFONTGDRAWSTRINGTHEDATETOSTRING,10,50想一下你得到基本的概念了吗让我们逐行的开始吧第7,8行定义了两个基本的中间变量THEFONT和THEDATE,它含有表现出当前字体和当前日期的对象。START命令触发实际程序的执行。注意在这个方法中的WHILE循环;考虑到TESTTRUE)永远返回TRUE,所以此循环从没存在过。在下面的叙述中,一个动画画面将在WHILE循环中被建立类DATE代表一个日期和时间。第12行创建了一个包含当前日期和时间的新的类DATE,并且把它付给变量THEDATE。REPAINT命令被调用。看起来很复杂的第14,15行除了在循环结束前延时1000微秒之外并没做什么别的。SLEEP命令作为类THREAD的一部分是使程序停止的原因。没有一个特别的SLEEP命令,APPLET将尽可能快地运行,在一个高速的计算机系统中他可能运行得太快以至于我们的肉眼无法看到它。使用SLEEP使得你能够准确的控制此动画多快地发生。在它周围的TRY及CATCH使得JAVA处理错误。TRY和CATCH被称作例外并将在下周被描述。这里,在PAINT之内,所有的当前字体(在变量THEFONT)被设置,并且日期也被打印在屏幕上(注意你已经调用TOSTRING命令把日期转换为一个字符串)。无论什么数据出现在THEDATE中,字符串总是一秒钟更新一次以反映新的日期。对于这个例子有一些事情需要注意。首先你应该认为在PAINT命令中创建新的DATE将变得更容易。在这个方法中你可以使用一个局部变量而不需要一个全局变量运行于DATA中。虽然那样做可以创建更加清晰的代码,但却导致程序的效率下降。每当一个画面需要被改变的时候,PAINT命令都需要被调用。在这个例子中,虽说这不是那样的重要,但在一个需要快速切换画面的动画中,PAINT命令不得不每次都停下来创建新的对象。如果我们使PAINT工作的很好即在屏幕上绘图并计算新的对象,你可以使得绘画更具效率。这确实是FONT也在中间变量中的原因。THREADS它们是什么并且为什么我们需要它们从你从前对操作系统及在那些系统中的环境的经验,你或许已经或许还没有进入到THREADS的概念中。让我们从一些基本定义开始吧。当一个程序开始运行,它开始执行它的初始代码,调用命令或则进程,并且将继续运行直到程序全部完成或则退出运行。运行的程序使用一个单独的THREAD在此程序中THREAD是一个控制的焦点。MULTITHREADING在JAVA中使得不同的操作THREADS能够在同一时间,在同一个程序中以并行且不互相干扰的方式运行。这里是个简单的例子。假设你要在程序的开始处做一个很长的计算。这个很长的计算可能会再后来程序执行的时候才被需要它确实与程序的主要内容相切,但还是最终要完成的。但在一个单主线的程序中,你不得不在剩余的程序能够继续运行之前等待计算的结束。在一个多主线的系统中,你可以把计算放到它自己的THREAD中,使得剩下的程序能继续单独的运行。在JAVA中使用THREADS你可以创建一个运行于它自己的THREAD的APPLET,并且它将很幸运的在不影响系统的其它部分的情况下独立运行自己的所有内容。使用THREADS你可以自一个页面中同时拥有很多APPLETS。根据你拥有APPLETS的数量,你可以最终消耗所有的系统资源以至于它们将运行得较慢,但它们仍将单独运行。即使你没有很多APPLET,在你的APPLET中使用THREADS仍是一个很好的JAVA编程的练习。对于运行良好的APPLETS的THUMB规则无论你何时有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论