翻譯文獻(xiàn)-簡單的動畫及其實現(xiàn)_第1頁
翻譯文獻(xiàn)-簡單的動畫及其實現(xiàn)_第2頁
翻譯文獻(xiàn)-簡單的動畫及其實現(xiàn)_第3頁
翻譯文獻(xiàn)-簡單的動畫及其實現(xiàn)_第4頁
翻譯文獻(xiàn)-簡單的動畫及其實現(xiàn)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

外文原文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中文翻譯簡單的動畫及其實現(xiàn)我所見的使用JAVA做的第一個工作是一個動畫一個用很大的紅色字體所寫的“HITHERE”從屏幕的左邊移動到屏幕的右邊。即使這樣簡單的動畫也足夠使得我停下來并進(jìn)行思考,“這確實夠酷的”。只有少數(shù)幾種方法可以用來在JAVA中執(zhí)行這種簡單的動畫,但這些簡單方法是任何你想動態(tài)的更新屏的JAVA程序的基礎(chǔ)。從這個簡單的動畫開始學(xué)習(xí)JAVA是建構(gòu)更加復(fù)雜的程序的一個好方法?,F(xiàn)在你將學(xué)習(xí)在JAVA中實現(xiàn)動畫的基礎(chǔ)系統(tǒng)中各個部分是如何統(tǒng)一工作以使得你能夠創(chuàng)建移動的圖片和動態(tài)的可升級的程序。具體地說,你將探索以下部分JAVA的動畫是如何工作的PAINT和REPAINT方法,開始和結(jié)束動態(tài)的程序,如何使用和忽略在你自己的程序中的這些方法。減少JAVA動畫中的閃爍,和一些常見問題。你將參與很多創(chuàng)建動畫和操作某種動作的實際程序的很多例子的工作。在JAVA中創(chuàng)建動畫在JAVA中創(chuàng)建動畫包括兩個步驟創(chuàng)建一個動畫的框架,并且要求JAVA向此框架內(nèi)繪畫。如果需要可重復(fù)操作來創(chuàng)建動作的形態(tài)。上一次你所創(chuàng)建的基礎(chǔ)的,靜態(tài)的程序教會你如何完成第一部分;那么剩下來的就是如何告訴JAVA如何在此框架中繪畫。PAINTING和REPAINTINGPAINT方法,就像你上次學(xué)到的,當(dāng)APPLET第一次被調(diào)用,當(dāng)包含它的窗口被移動,或者當(dāng)另一個窗口從它之上被移走的條件下,無論何時APPLET需要被繪畫都將被JAVA調(diào)用。然而你同樣可以按照自己的選擇讓JAVA啟動REPAINT程序。所以為了改變在屏幕中的外觀,你需要建造圖像或則你想要描繪的框架,并且讓JAVA繪制這個畫面。如果你重復(fù)這樣操作,并且足夠快,你便可以在你的JAVA程序中得到動畫。所有這些將在哪里發(fā)生呢并不是在PAINT方法的自身中。所有的PAINT操作是在屏幕上打點。PAINT,換句話說只是為一次性的動畫的當(dāng)前畫面負(fù)責(zé)。改變PAINT操作及為一個動畫修飾畫面的實際工作實際上發(fā)生在你的程序的定義的其他什么地方。(在所謂的其它什么地方,你創(chuàng)建了畫面為PAINT設(shè)置變量,創(chuàng)建顏色或則字體,及PAINT需要的對象),并且調(diào)用REPAINT方法。REPAINT是導(dǎo)致JAVA調(diào)用PAINT并關(guān)閉你的畫面的觸發(fā)。技術(shù)注釋因為一個JAVAAPPLET能夠包含很多需要被描繪的組件,并且事實上,APPLETS被嵌入在一個大的JAVA的應(yīng)用之中,此應(yīng)用將用同樣的方法在屏幕中繪圖,當(dāng)你調(diào)用REPAINT時你其實并不是立刻就在屏幕上按照你在其它窗口或則繪圖工具欄所做的那樣。相反,REPAINT是一個對于JAVA來說盡可能快的重新繪制你的APPLET的請求。大多數(shù)情況下,在調(diào)用命令和實際的REPAINT之間的時延時是可忽略的。開始并停止一個程序的執(zhí)行記得在第八天所說的START和STOP命令嗎它們是能夠觸發(fā)你的程序開始及停止運行的方法。上一次你并沒有使用START和STOP命令,因為那次的APPLET除了一次性的PAINT之外并沒有做其它工作。在動畫及JAVA的其它程序運行的過程中,你將需要利用START和STOP命令去觸發(fā)你的程序執(zhí)行的開始以及在你想離開包含APPLET的頁面時停止程序的運行。對于大多數(shù)的APPLET中,為此原因你將希望不考慮START及STOP命令。START命令觸發(fā)APPLET的執(zhí)行。你可以在此命令中做所有APPLET的工作,或則可以調(diào)用其它對象的命令。通常,START被用來創(chuàng)建并開始一個思路的執(zhí)行為的是APPLET可以在它自己的時間內(nèi)運行。另一方面,STOP停止一個程序的執(zhí)行當(dāng)你移開正在顯示的APPLET的頁時,STOP并不持續(xù)運行并使用系統(tǒng)資源。大多數(shù)的情況下在你創(chuàng)造一個START的同時,你同樣也應(yīng)該創(chuàng)建一個相應(yīng)的STOP。把它放在一起用語言解釋JAVA是如何做一個動畫的不僅僅是表現(xiàn)出它在編碼上是如何實現(xiàn)的。一兩個例子可使得所有這些命令的關(guān)系更清楚。列表101顯示了一個例子APPLET,這個APPLET使用基礎(chǔ)的動畫顯示了日期和時間并持續(xù)的以一秒的時間間隔更新此狀態(tài),這個例子創(chuàng)建了一個很簡單的動畫數(shù)字時鐘,這個時鐘的畫面顯示于FIGURE101。在前面的段落中“ATFIRSTGLANCE”是非常重要的這個APPLET確實工作然而,即使它不工作,你仍然能夠?qū)W到基本的動畫的很多東西,所以此編碼的學(xué)習(xí)仍是有價值的。在下一段中,你將要學(xué)習(xí)還有什么問題。看一下在你繼續(xù)分析此編碼的同時能夠考慮出將會發(fā)生什么。列表101這個APPLETIMPORTJAVAAWTGRAPHICSIMPORTJAVAAWTFONTIMPORTJAVAUTILDATEPUBLICCLASSDIGITALCLOCKEXTENDSJAVAAPPLETAPPLETFONTTHEFONTNEWFONT“TIMESROMAN”,FONTBOLD,24DATETHEDATEPUBLICVOIDSTARTWHILETRUETHEDATENEWDATEREPAINTTRYTHREADSLEEP1000CATCHINTERRUPTEDEXCEPTIONEPUBLICVOIDPAINTGRAPHICSGGSETFONTTHEFONTGDRAWSTRINGTHEDATETOSTRING,10,50想一下你得到基本的概念了嗎讓我們逐行的開始吧第7,8行定義了兩個基本的中間變量THEFONT和THEDATE,它含有表現(xiàn)出當(dāng)前字體和當(dāng)前日期的對象。START命令觸發(fā)實際程序的執(zhí)行。注意在這個方法中的WHILE循環(huán);考慮到TESTTRUE)永遠(yuǎn)返回TRUE,所以此循環(huán)從沒存在過。在下面的敘述中,一個動畫畫面將在WHILE循環(huán)中被建立類DATE代表一個日期和時間。第12行創(chuàng)建了一個包含當(dāng)前日期和時間的新的類DATE,并且把它付給變量THEDATE。REPAINT命令被調(diào)用。看起來很復(fù)雜的第14,15行除了在循環(huán)結(jié)束前延時1000微秒之外并沒做什么別的。SLEEP命令作為類THREAD的一部分是使程序停止的原因。沒有一個特別的SLEEP命令,APPLET將盡可能快地運行,在一個高速的計算機(jī)系統(tǒng)中他可能運行得太快以至于我們的肉眼無法看到它。使用SLEEP使得你能夠準(zhǔn)確的控制此動畫多快地發(fā)生。在它周圍的TRY及CATCH使得JAVA處理錯誤。TRY和CATCH被稱作例外并將在下周被描述。這里,在PAINT之內(nèi),所有的當(dāng)前字體(在變量THEFONT)被設(shè)置,并且日期也被打印在屏幕上(注意你已經(jīng)調(diào)用TOSTRING命令把日期轉(zhuǎn)換為一個字符串)。無論什么數(shù)據(jù)出現(xiàn)在THEDATE中,字符串總是一秒鐘更新一次以反映新的日期。對于這個例子有一些事情需要注意。首先你應(yīng)該認(rèn)為在PAINT命令中創(chuàng)建新的DATE將變得更容易。在這個方法中你可以使用一個局部變量而不需要一個全局變量運行于DATA中。雖然那樣做可以創(chuàng)建更加清晰的代碼,但卻導(dǎo)致程序的效率下降。每當(dāng)一個畫面需要被改變的時候,PAINT命令都需要被調(diào)用。在這個例子中,雖說這不是那樣的重要,但在一個需要快速切換畫面的動畫中,PAINT命令不得不每次都停下來創(chuàng)建新的對象。如果我們使PAINT工作的很好即在屏幕上繪圖并計算新的對象,你可以使得繪畫更具效率。這確實是FONT也在中間變量中的原因。THREADS它們是什么并且為什么我們需要它們從你從前對操作系統(tǒng)及在那些系統(tǒng)中的環(huán)境的經(jīng)驗,你或許已經(jīng)或許還沒有進(jìn)入到THREADS的概念中。讓我們從一些基本定義開始吧。當(dāng)一個程序開始運行,它開始執(zhí)行它的初始代碼,調(diào)用命令或則進(jìn)程,并且將繼續(xù)運行直到程序全部完成或則退出運行。運行的程序使用一個單獨的THREAD在此程序中THREAD是一個控制的焦點。MULTITHREADING在JAVA中使得不同的操作THREADS能夠在同一時間,在同一個程序中以并行且不互相干擾的方式運行。這里是個簡單的例子。假設(shè)你要在程序的開始處做一個很長的計算。這個很長的計算可能會再后來程序執(zhí)行的時候才被需要它確實與程序的主要內(nèi)容相切,但還是最終要完成的。但在一個單主線的程序中,你不得不在剩余的程序能夠繼續(xù)運行之前等待計算的結(jié)束。在一個多主線的系統(tǒng)中,你可以把計算放到它自己的THREAD中,使得剩下的程序能繼續(xù)單獨的運行。在JAVA中使用THREADS你可以創(chuàng)建一個運行于它自己的THREAD的APPLET,并且它將很幸運的在不影響系統(tǒng)的其它部分的情況下獨立運行自己的所有內(nèi)容。使用THREADS你可以自一個頁面中同時擁有很多APPLETS。根據(jù)你擁有APPLETS的數(shù)量,你可以最終消耗所有的系統(tǒng)資源以至于它們將運行得較慢,但它們?nèi)詫为氝\行。即使你沒有很多APPLET,在你的APPLET中使用THREADS仍是一個很好的JAVA編程的練習(xí)。對于運行良好的APPLETS的THUMB規(guī)則無論你何時有

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論