WEB开发网      濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堝姛缂佺娀绠栭弻宥堫檨闁告挻姘ㄩ幑銏犫槈濞嗘劕顎撻梺鍛婂姇瀵爼骞栭幇顔炬/闁告挆鍕畬闂佸疇顫夐崹鍧楀箖閳哄啠鍋撻崷顓炐㈡い銉︾箞濮婂搫效閸パ€鍋撳Δ鍛;闁规崘顕ф闂佸憡娲﹂崹鎵不濞戙垺鐓曟い鎰剁稻缁€鍐┿亜鎼达紕效婵﹨娅g划娆忊枎閹冨闂備礁鎽滄慨鐢稿礉濞嗘劒绻嗛柣銏⑶圭粈瀣亜閺嶃劏澹橀柛鐐姂濮婃椽妫冨ù銈嗙⊕閹峰懘骞撻幒宥咁棜闂備礁婀遍崕銈夈€冮崱娑樼厱闁圭儤顨嗛悡鏇㈡煛閸ャ儱濡煎ù婊勭矋閵囧嫯绠涢敐鍛睄闂佸搫澶囬埀顒€纾弳鍡涙倵閿濆骸澧伴柡鍡欏█閺屟勫濞嗘垵鍩岄梺闈涙鐢帡锝炲┑瀣亗閹艰揪绲奸悽鑽ょ磽娴h娈曢柛銊ョ仢椤繒绱掑Ο璇差€撶紓浣圭☉椤戝懎鈻撻鐐╂斀妞ゆ梹鏋婚崗顒傜磼閻樿櫕宕岄柕鍡曠椤繈骞囨担鍏夋瀸濠电姷鏁告慨顓㈠磻閹捐秮褰掓晲閸モ斂鈧﹪鏌¢埀顒佺鐎n偆鍘藉┑鈽嗗灡椤戞瑩宕电€n兘鍋撶憴鍕仩闁稿氦绮鹃悘鍐⒑缂佹◤顏勵嚕閸洖鐤柣鎰暩绾惧ジ鏌涚仦鐐殤閺佸牓鎮楃憴鍕缂侇喖绻樿棟閻庨潧鎽滃Λ顖炴煙椤栧棔绀佹禒顕€鎮楀▓鍨灈闁绘牜鍘ч悾鐑芥偂鎼存ɑ顫嶅┑鈽嗗灟鐠€锕傛倵瀹曞洨纾介柛灞剧懅閸斿秵銇勯妸銉︻棞闁伙絾绻堥獮鏍ㄦ媴濮濆本鎲伴梻浣虹帛濡啴藟閹捐姹查悗锝庡枟閻撶喐淇婇妶鍌氫壕闂佺粯顨呭Λ妤呭煝閹炬緞鏃堝川椤旇瀚奸梺鑽ゅТ濞茬娀鍩€椤掑啯鐝柣蹇婂亾闂傚倷绀侀幖顐﹀箠閹邦厽鍙忛柟缁㈠枟閸嬧晠鏌i妶搴$仜濞存粌缍婇弻鐔兼倻濡偐鐣洪梺鍝勬噺缁诲牆顫忓ú顏咁棃婵炴垶鑹鹃。鍝勨攽閳藉棗浜濋柣鐔叉櫊閵嗕礁鈻庨幒鏃傛澑闂佸搫鍟崐濠氭儊閸儲鈷戞慨鐟版搐閻忓弶绻涙担鍐插椤╃兘鏌ㄩ弴鐐测偓褰掓偂閺囥垺鐓忓┑鐐茬仢閸斻倝鏌涢埡瀣ɑ妞ゃ劊鍎甸幃娆撳级閹存繍娼氭俊銈囧Х閸嬬偤鏁冮姀銈冣偓浣糕枎閹炬潙娈愰梺鍐叉惈椤戝洭鐛姀銈嗏拻闁稿本鐟︾粊鐗堛亜椤愩埄妲搁柣锝呭槻铻i柤娴嬫櫇閻撳顪冮妶鍡橆梿闁跨喆鍎茬粋宥堛亹閹烘挾鍘甸梺缁樺灦钃遍悘蹇e幖闇夋繝濠傚暟缁夌儤鎱ㄦ繝鍛仩缂佽鲸甯掕灒闁惧繘鈧稒顢橀梻鍌欑劍鐎笛兠哄澶婄柧婵炴垶绮庢禍閬嶆⒒娴e憡鍟炴繛璇х畵瀹曞綊鏌嗗鍛幈闂佺鎻梽鍕偂濞嗘挻鐓犳繛鏉戭儐濞呭懎霉閻樺磭鐭婇柍瑙勫灴閸ㄩ箖鎮欓挊澶夊垝闂備浇顕栭崰妤呫€冮崨鏉戠叀濠㈣埖鍔曠粻鎶芥煙閹屽殶鐟滄澘娲ㄧ槐鎾诲磼濞嗘垼绐楅梺鍝ュУ閻楃娀銆侀弽顓炲窛闁圭⒈鍘介弲锝夋⒑缁嬭法绠抽柛妯犲懏顐介柣鎰節缁诲棙銇勯弽銊х煂閻㈩垱绋掔换娑㈠川椤撶喎鏋犲┑顔硷功缁垶骞忛崨瀛樺仭闂侇叏绠戝▓婵堢磽閸屾瑦绁版い鏇嗗洤纾归柛顭戝櫘閸ゆ洜绱撴担璐細缂佲檧鍋撻梻浣规偠閸庮垶宕濆鍛瀺闁搞儺鍓氶埛鎴犵磼鐎n偄顕滄繝鈧幍顔剧<閻庯綆鍋呭畷宀€鈧娲忛崹浠嬪箖娴犲宸濆┑鐘插楠炴姊洪悷鏉挎倯闁伙綆浜畷瑙勭節濮橆剛鍘愰梺鍝勬储閸ㄦ椽鎮¢妷锔藉弿婵☆垰鐏濋悡鎰版煟閹捐泛鏋涢柣鎿冨亰瀹曞爼濡烽妷銉バ戠紓鍌欑椤戝牆鐣烽悽鍨潟闁圭儤姊荤壕鍏间繆椤栨繂浜归柣锝堟缁辨挻鎷呴搹鐟扮缂備浇顕ч悧鍡涙偩瀹勯偊娼ㄩ柍褜鍓氭穱濠傤潰瀹€濠冃ㄧ紓鍌欐祰妞村摜鎹㈤崼婵愭綎缂備焦蓱婵绱掑☉姗嗗剰婵炲牊鍔欏娲箹閻愭彃顬嗛梺鍛婎殔閸熷潡鎮鹃悜绛嬫晬闁绘劘灏欐鍥⒑閻熼偊鍤熷┑顕€娼ч埢鎾淬偅閸愨斁鎷虹紓鍌欑劍钃遍柍閿嬪浮閺屽秴鐣¢幍顔尖叺閻庢鍣崑濠傜暦閹烘鍊烽悗鐢登归獮鍫ユ⒒娴g懓鈻曢柡渚囧櫍瀹曟垿骞樼紒妯煎幐闂佸憡渚楅崰姘跺箠閸涱喕绻嗛柛娆忣槸婵洭鎽堕敐澶嬪仩婵炴垶甯掓晶鏌ユ煛閸屾浜鹃梻鍌氬€烽懗鍓佸垝椤栫偛绀夐柡鍥╁€i悢鍝ョ瘈闁搞儜鍐╁劒闂備胶绮弻銊╂儍濠靛缁╅柤鎭掑劘娴滄粓鏌¢崘銊﹀妞ゃ儱顦甸弻娑㈠棘鐠囨祴鍋撳┑瀣闁割偅娲橀崐鐑芥煟閹寸偍缂氶柛姗€浜跺娲传閸曨剙鍋嶉梺鍛婃煥閺堫剟寮查崼鏇ㄦ晬闁绘劕顕崢鍗炩攽閻愬弶顥滅紒缁樺笧缁粯绻濆顓犲幐闁诲繒鍋熼弲顐f櫏闁诲氦顫夊ú锕傚磻婵犲倻鏆﹂柣鏃傗拡閺佸棝鏌嶈閸撴瑩鍩㈠澶嬫櫜闁搞儮鏅濋敍婵囩箾鏉堝墽绋荤憸鏉垮暞缁傚秹鎮欓鍌滅槇闂侀潧楠忕徊鍓ф兜閻愵兙浜滈柟瀛樼箖瀹告繄绱掗鍓у笡闁靛牞缍佸畷姗€鍩¢崘銊ョ闂備浇顕х€涒晝绮欓幒鎴犲箵閻犳亽鍔庢稉宥嗘叏濡炶浜鹃梺鍝勮閸斿矂鍩ユ径濞㈢喐寰勯惂鍝ョɑ闁靛洤瀚版俊鎼佹晲閸涱厼袝闂備浇顕栭崰妤呮偡閳哄懌鈧線寮崼婵堫槹濡炪倖鎸荤换鍕矆閸曨垱鈷掗柛灞剧懄缁佺増銇勯弴鐔哄⒌鐎规洑鍗冲浠嬵敃閵堝浂妲稿┑鐘垫暩婵挳宕愭繝姘辈闁挎洖鍊归悡娆愩亜閺嶎偄浠滃ù婊呭娣囧﹪鎳犳0婵嗘闂佸疇顫夐崹鍧楀春閸曨垰绀冮柕濞у懌鍋″┑锛勫亼閸娿倝宕㈡ィ鍐ㄧ婵☆垯璀﹂崵鏇㈡偣閸ャ劎銈存俊鎻掔墦閺屾洝绠涢弴鐑嗘綌闂佸啿鎼幊蹇涙偂韫囨搩鐔嗛悹楦挎婢ф洟鏌涢弮鈧幐鎶藉蓟濞戙垹妫樻繛鍡欏亾妤旂紓鍌欐祰妞存悂骞愭繝姘闁告侗鍨抽惌娆撳箹鐎涙ɑ灏ù婊堢畺閺屾稑鈹戦崟顐㈠Б闂佹椿鍘介幐楣冨箟閹间焦鍋嬮柛顐g箘閻熴劑姊洪崫鍕靛剮缂佽埖宀稿濠氭偄閻撳海顦悷婊冪箳閺侇喖鈽夐姀锛勫幐闂佸憡渚楅崰妤呭磹閹扮増鐓涢悘鐐额嚙婵倿鏌熼鍝勨偓婵嗙暦閹烘垟妲堟慨妤€妫旂槐锟� ---闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛濠傛健閺屻劑寮崼鐔告闂佺ǹ顑嗛幐鍓у垝椤撶偐妲堟俊顖氭惈缁犺鈹戦悙鍙夆枙濞存粍绮撻幃鈥斥槈閵忥紕鍘卞┑鐐村灥瀹曨剟鐛Ο姹囦簻闁哄倹瀵чˉ銏℃叏婵犲懏顏犻柟鐟板婵℃悂濡烽敂鎯х稈闂傚倷鑳堕幊鎾诲吹閺嶎厼绠柨鐕傛嫹
开发学院软件开发Java OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序 阅读

OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

 2010-04-13 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亜顒㈡い鎰Г閹便劌顫滈崱妤€骞婄紓鍌氬€瑰銊╁箟缁嬫鍚嬮柛顐線缂冩洟姊婚崒娆戭槮婵犫偓闁秵鎯為幖娣妼缁愭鏌″搴′簽濞戞挸绉甸妵鍕冀椤愵澀娌梺缁樻尪閸庣敻寮婚敐澶婂嵆闁绘劖绁撮崑鎾诲捶椤撴稑浜炬慨妯煎亾鐎氾拷闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亝鎹i柣顓炴閵嗘帒顫濋敐鍛婵°倗濮烽崑娑⑺囬悽绋挎瀬闁瑰墽绮崑鎰版煙缂佹ê绗ч柍褜鍓﹂崣鍐潖閸濆嫅褔宕惰娴犲ジ姊虹拠鑼闁煎綊绠栭幃楣冩倻閽樺鎽曢梺闈涱檧婵″洭宕㈤悽鍛娾拺閻熸瑥瀚烽崯蹇涙煕閻樺磭澧甸柕鍡楀€圭缓浠嬪川婵犲嫬骞堥梺纭呭閹活亞妲愰弴鐔哄ⅰ闂傚倷绶氬ḿ褍煤閵堝洠鍋撳顐㈠祮闁绘侗鍣i獮鎺懳旈埀顒傜不閿濆棛绡€闂傚牊绋戦弳娆徝瑰⿰鍫㈢暫闁哄矉缍佹慨鈧柍鎯版硾濠€杈ㄧ珶閺囩喓绡€婵﹩鍘鹃崢鐢告⒑缂佹ê濮﹂柛鎾村哺閹ɑ娼忛妸銈囩畾闂佸湱绮敮鐐存櫠濞戞氨纾肩紓浣贯缚濞插鈧娲栧畷顒冪亙闂佸憡鍔曢崯鐘诲礈濠靛牊宕叉繛鎴炨缚閺嗗棗鈹戦悩杈厡闁轰焦鐗滅槐鎾存媴娴犲鎽甸梺鍦嚀濞层倝鎮鹃悜钘夌闁规惌鍘介崓鐢告⒑閻熸澘鎮侀柣鎺炵畵閹骞栨担鍏夋嫽婵炶揪绲块崕銈夊吹閳ь剟姊洪幖鐐测偓鏍偋閻樿崵宓侀煫鍥ㄧ⊕閺呮悂鏌ㄩ悤鍌涘濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴f閺嬩線鏌涘☉姗堟敾闁告瑥绻戦妵鍕箻閸楃偟浠肩紓浣哄閸ㄥ爼寮诲☉銏犵疀闂傚牊绋掗悘鍫ユ倵閻熺増鍟炵紒璇插暣婵$敻宕熼姘鳖啋闁诲酣娼ч幗婊堟偩婵傚憡鈷戠痪顓炴媼濞兼劖绻涢懠顒€鏋庢い顐㈢箳缁辨帒螣閼测晜鍤岄梻渚€鈧偛鑻晶顔肩暆閿濆牆鍔垫い锔界叀閹繝濡舵径瀣帾闂佸壊鍋呯换鍐磻椤忓懐绠剧€瑰壊鍠曠花濠氬箚閻斿吋鈷戦悗鍦У閵嗗啴鏌ら崘鑼煟鐎规洘绻堥弫鍐焵椤掑嫧鈧棃宕橀鍢壯囨煕閳╁喚娈橀柣鐔稿姍濮婃椽鎮℃惔鈩冩瘣闂佺粯鐗曢妶绋跨暦閻戞ḿ绡€闁搞儜鍐ㄧギ闂備線娼ф蹇曟閺囥垹鍌ㄦい蹇撶墛閳锋垿鏌熼懖鈺佷粶闁告梹顨婇弻锟犲川椤旈敮濮囩紓浣稿€圭敮鐔妓囩€靛摜纾奸弶鍫涘妼缁楁碍绻涢悡搴g闁糕斁鍓濋幏鍛存煥鐎e灚缍楅梻鍌氬€峰ù鍥ь浖閵娾晜鍊块柨鏇炲€哥粻鏌ユ煕閵夘喖澧柡瀣╃窔閺岀喖宕滆鐢盯鏌¢崨顔藉€愰柡灞诲姂閹倝宕掑☉姗嗕紦闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾剧懓顪冪€n亜顒㈡い鎰Г閹便劌顫滈崱妤€骞婄紓鍌氬€瑰銊╁箟缁嬫鍚嬮柛顐線缂冩洟姊婚崒娆戭槮婵犫偓闁秵鎯為幖娣妼缁愭鏌″搴′簽濞戞挸绉甸妵鍕冀椤愵澀娌梺缁樻尪閸庣敻寮婚敐澶婂嵆闁绘劖绁撮崑鎾诲捶椤撴稑浜炬慨妯煎亾鐎氾拷  闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌i幋锝呅撻柛銈呭閺屻倝宕妷锔芥瘎婵炲濮靛銊ф閹捐纾兼繛鍡樺笒閸橈紕绱撴笟鍥ф珮闁搞劌鐖兼俊鎾礃椤旂厧绐涢梺鍝勵槹閸ㄥ綊宕㈠ú顏呭€垫鐐茬仢閸旀碍銇勯敂璇茬仸鐎规洩绻濋獮搴ㄦ嚍閵壯冨妇闂傚⿴鍋勫ú锕€煤閺嶃劎澧¢梻鍌欐祰椤曆呪偓鍨浮瀹曟粓鎮㈡總澶嬬稁闂佹儳绻愬﹢杈╁閸忛棿绻嗘い鏍ㄧ閹牊銇勯銏㈢劯婵﹥妞藉畷鐑筋敇濞戞瑥鐝遍梻浣呵归鍛涘┑瀣畾闁逞屽墯閵囧嫯绠涢幘瀵搞偐濠碘槅鍨扮€氭澘顫忓ú顏勪紶闁告洦鍓氶幏鍗炩攽閻愭彃绾у畝锝呮健楠炴垿濮€閻橆偅鏂€婵犵數濮寸€氼噣寮堕幖浣光拺闁告繂瀚婵嗏攽椤旀儳鍘撮柟顔诲嵆婵$兘鍩¢崒妤佸濠电偠鎻徊浠嬪箹椤愩倖鏆滈悹杞拌閻斿棝鏌i悢宄扮盎闁衡偓閼姐倗纾奸柛灞炬皑瀛濆Δ妤婁簷閸楀啿鐣烽悡搴僵闁挎繂鎳嶆竟鏇㈡⒑閸濆嫬鏆欓柣妤€妫涚划鍫ュ礃閳瑰じ绨婚棅顐㈡搐濞寸兘藝閿曗偓闇夋繝濠傜墢閻f椽鏌$仦璇插闁宠鍨垮畷鍗炩槈閹典礁浜炬俊銈傚亾妞ゎ叀鍎婚¨渚€鏌涢悩宕囧⒌婵犫偓娓氣偓濮婅櫣绱掑Ο鏇熷灴閹兘濡疯閸嬫挸顫濋悡搴㈢亾缂備緡鍠氱划顖炲Χ閿濆绀冮柍鍝勫暙楠炲牊淇婇悙顏勨偓鏍礉閹达箑纾归柡鍥ュ灩閸戠娀骞栧ǎ顒€濡介柣鎾跺枛閻擃偊宕惰閸庡繘鏌涢弮鈧划鎾诲蓟閺囥垹鐐婄憸宥夘敂椤撶姭鍋撳▓鍨灍婵炲吋鐟ㄩ悘鎺楁⒑閸涘﹦绠撻悗姘煎墲椤ゅ倹绻濈喊澶岀?闁稿鍨垮畷鎰板箣閿曗偓閸ㄥ倹绻涘顔荤凹闁稿绻濋弻宥夊传閸曨剙娅g紓浣哄У閻楃娀寮诲澶婄厸濞达絽鎲″▓鏌ユ⒑缁嬫寧鎹i柛鐘崇墵瀵寮撮姀鐘靛€為悷婊冪Ф閼鸿鲸绻濆顓犲幍闂佸憡鍨崐鏍偓姘炬嫹
核心提示:本系列第 1 部分 向您介绍了 OpenCable Application Platform (OCAP) — 针对交互式有线电视应用程序的平台 — 和 OCAP Reference Implementation (RI),您已经了解到,OCAP 入门,第 2 部分: 为 OCAP RI 编写应

本系列第 1 部分 向您介绍了 OpenCable Application Platform (OCAP) — 针对交互式有线电视应用程序的平台 — 和 OCAP Reference Implementation (RI)。您已经了解到,OCAP 的结构基于 3 个规范,这些规范是标准 Java ME 技术的一部分:

Connected Device Configuration (CDC) 描述一个 JVM 和一组基础 APIs。

Foundation Profile (FP) 提供其他 APIs。

Personal Basis Profile (PBP) 规定图形功能。

就 Java, Standard Edition (Java SE) 而言,CDC/FP/PBP 堆栈几乎等同于 Java Development Kit (JDK) 1.4.2。 但是,对此不要过于较真 — 这只是帮助您理解 CDC/FP/PBP 堆栈的一个比方。

在 第 1 部分 中,您运行了几个与 RI 绑定的演示应用程序。在本文中,您将学习如何创建可以在 RI 和其他 OCAP 设备上运行的应用程序。您将首先使用命令行,然后使用 Eclipse 的 OCAP 插件。

交叉编译

一般来说,OCAP 应用程序的构建是一个交叉编译 示例,也就是说,您在一个平台上构建应用程序,但打算在另一个平台上运行它。就移动电话等小型平台而言,交叉编译的概念很好理解。移动电话应用程序并不在移动电话本身上构建。通常,您使用一台桌面计算机(主机)来创建将在移动电话(目标)上运行的应用程序。类似地,您可以在桌面计算机上使用一个 Java SE 环境来构建将在 OCAP 平台上运行的应用程序。

这就是麻烦所在。您在 第 1 部分 中下载的 OCAP RI 也运行在您的桌面计算机上,但它的确是一个模拟器。OCAP RI 将您的计算机模拟为一个机顶盒。

不管怎样,如果您构建一个 OCAP 应用程序,它应该能够在任意 OCAP 平台上运行,不管是真正的机顶盒还是像 OCAP RI 这样的模拟器。

在命令行上磨练性格

做父母的常常会告诫他们的孩子:任何令人不快的事情都有利于磨练性格。当您使用命令行工具来构建 OCAP 应用程序时,不要忘记这一点。您肯定会学到关于构建过程到底是如何工作的很多知识。即使您选择使用 Eclipse 来构建 OCAP 应用程序(本文后面将介绍这方面的内容),在命令行上执行构建步骤将有助于您更深刻地理解 Eclipse 为您做了哪些工作。

构建 OCAP 实现的结构

术语说明

OCAP 代码本身可以针对包括真实设备在内的各种平台构建。另外,您还可以构建在 RI 平台上运行的 OCAP 代码,RI 平台是一个层,它在 Windows 或 Linux 桌面计算机上模拟 OCAP 设备。OCAP RI 包括 OCAP 实现和 RI 平台。

尽管您没有下载 OCAP RI 的完整源代码,但您在 第 1 部分 中安装的二进制 OCAP RI 拥有类似的目录结构。了解这个结构有利于您定位重要文件和目录。

一个重要的位置就是 OCAPROOT,它是 OCAP 实现源代码的根。它是一个相当复杂的树的根,这个树支持在不同的主机上、针对多个目标构建代码。例如,您可以在一台 Linux 计算机上针对一种特定的机顶盒构建 OCAP 实现。或者,您也可以在 Windows 计算机上针对 OCAP RI 平台进行构建。

OCAPROOT 的实际值取决于 OCAP RI 二进制文件的安装位置。如果使用默认安装位置,这个值就是 /CableLabs/tru2way/ocap-ri/ocap。(尽管 Windows 通常使用反斜杠作为路径分隔符,为保持统一,本文使用正斜杠作为路径分隔符。)

当您构建 OCAP 实现时,结果存储到 ${OCAPROOT}/bin 目录中。具体来说,这些结果被放置到其名称反映目标平台的子文件夹中。这个目标平台由 OCAPTC 表示,构建结果存储在 ${OCAPROOT}/bin/${OCAPTC} 文件夹中。

例如,当您构建 Windows OCAP 堆栈时,OCAPTC 就是 CableLabs/simulator/Win32/debug。

在 OCAP 构建中发现需要的内容

OCAP 实现的一个成功构建将生成一些 Java 类文件和本地库。为了构建 OCAP 应用程序,您真正需要关心的全部内容就是定义平台的类文件。

OCAP Java 平台被打包为两个 JAR 文件:

${OCAPROOT}/bin/${OCAPTC}/env/cvm/lib/basis.jar 是 CDC/FP/PBP 堆栈。

${OCAPROOT}/bin/${OCAPTC}/env/sys/ocap-classes.jar 包含 OCAP 实现的所有 Java 类。

代码中的几行

使用这些 JAR 文件来创建 OCAP 应用程序之前,您需要一些源代码以进行构建。将清单 1 中的代码保存为 src/HelloOcap.java(或者 下载 它):

清单 1. 一些要构建的源代码

import javax.tv.xlet.Xlet; 
import javax.tv.xlet.XletContext; 
import javax.tv.xlet.XletStateChangeException; 
 
import org.havi.ui.HScene; 
import org.havi.ui.HSceneFactory; 
 
import java.awt.*; 
import java.awt.event.*; 
 
import java.util.Vector; 
import java.util.Random; 
 
public class HelloOCAP implements Xlet { 
 private HScene mScene; 
 private HelloOCAPUI mContent; 
  
 public void initXlet(XletContext ctx) throws XletStateChangeException { 
  System.out.println("HelloOCAP initXlet"); 
  HSceneFactory factory = HSceneFactory.getInstance(); 
  mScene = factory.getDefaultHScene(); 
   
  mContent = new HelloOCAPUI(); 
  mContent.setVisible(true); 
   
  mScene.setLayout(new BorderLayout()); 
  mScene.add(mContent, BorderLayout.CENTER); 
   
  Toolkit toolkit = Toolkit.getDefaultToolkit(); 
  Dimension d = toolkit.getScreenSize(); 
   
  mScene.setLocation(0, 0); 
  mScene.setSize(d.width, d.height); 
  mScene.validate(); 
 } 
  
 public void startXlet() throws XletStateChangeException { 
  mScene.setVisible(true); 
 } 
  
 public void pauseXlet() { 
 } 
  
 public void destroyXlet(boolean forced) throws XletStateChangeException { 
 } 
} 
 
class HelloOCAPUI extends Container { 
 private boolean mInitialized; 
 private Font mFont; 
 private int mX, mY; 
  
 public HelloOCAPUI() { 
  mInitialized = false; 
  mFont = null; 
  mX = mY = -1; 
 } 
  
 public void paint(Graphics g) { 
  String s = "Hello, OCAP!"; 
 
  if (mInitialized == false) { 
   mFont = new Font("Serif", Font.PLAIN, 96); 
   int w = getWidth(); 
   int h = getHeight(); 
   FontMetrics fm = g.getFontMetrics(mFont); 
   int sw = fm.stringWidth(s); 
   int sh = fm.getHeight(); 
   int sd = fm.getDescent(); 
   mX = (w - sw) / 2; 
   mY = (h + sh) / 2 - sd; 
   mInitialized = true; 
  } 
   
  g.setFont(mFont); 
  g.setColor(Color.blue); 
  g.drawString("Hello, OCAP!", mX, mY); 
 } 
} 

在清单 1 中,initXlet() 中的代码使用一个名为 HelloOCAPUI 的助手类来为这个应用程序建立了一个显示。HelloOCAPUI 主要处理将文本定位于屏幕中间的问题。

构建源代码

您可以使用一个相当长的命令行来构建 HelloOcap.java,但是,如果您计划经常执行这个操作,最好编写一个脚本(在 Windows 中也称为批文件)。

清单 2 是用于构建 HelloOCAPUI.java 源文件的脚本的一个示例。在 src 目录级别上,将这个脚本保存为 build.bat。这个脚本的最后一行 — 包含 javac 的那一行 — 很长,为清晰起见,这里将其分割为几行:

清单 2. 一个构建脚本

@echo off 
 
set JAVA_HOME=C:/Progra~1/Java/jdk1.6.0_16 
 
set OCAPROOT=/CableLabs/tru2way/ocap-ri/ocap set OCAPTC=CableLabs/simulator/Win32/debug 
 
set OCAP_ENV=%OCAPROOT%/bin/%OCAPTC%/env 
 
if not exist bin mkdir bin 
 
%JAVA_HOME%/bin/javac 
  -source 1.4 
  -target 1.4 
  -bootclasspath %OCAP_ENV%/cvm/lib/btclasses.zip; 
          %OCAP_ENV%/cvm/lib/basis.jar; 
          %OCAP_ENV%/sys/ocap-classes.jar 
  src/*.java 
  -d bin 

如果您的 JDK 或 OCAP RI 位于不同的目录中,则需要相应调整脚本。

安装您的应用程序

下一步是说服 OCAP RI 来运行您的应用程序。为此,首先将您刚才创建的类文件复制到 OCA RI 目录结构中。然后,在 src 目录级别上,将清单 3 的内容保存为 bin/hostapps.properties,提供一个 hostapps.properties 文件:

清单 3. hostapps.properties

app.0.application_identifier=0x000000015205 app.0.application_control_code=AUTOSTART 
app.0.visibility=VISIBLE 
app.0.priority=220 
app.0.base_directory=/syscwd/usr/HelloOCAP 
app.0.application_name=HelloOCAP 
app.0.initial_class_name=HelloOCAP 

最后,在 src 目录级别上,将清单 4 中的内容保存为一个脚本 install.bat,用于将类文件和 hostapps.properties 文件复制到 OCAP RI 中的一个文件夹中。

清单 4. install.bat

@echo off 
 
set OCAPROOT=/CableLabs/tru2way/ocap-ri/ocap 
set OCAPTC=CableLabs/simulator/Win32/debug 
 
set OCAP_ENV=%OCAPROOT%/bin/%OCAPTC%/env 
 
if not exist %OCAP_ENV%/usr/HelloOCAP mkdir %OCAP_ENV%/usr/HelloOCAP 
 
xcopy /s /y bin/* %OCAP_ENV%/usr/HelloOCAP 

在清单 4 中,OCAP_ENV 等同于 hostapps.properties 中的 /syscwd。这个脚本所做的全部工作就是将文件复制到一个 usr 子目录中。

最后一步

最后一步 — 也是很重要的一步 — 是将 OCAP RI 指向刚才创建的 hostapps.properties 文件。为此,编辑 mpeenv.ini 文件。还记得吗, 第 1 部分 介绍过,mpeenv.ini 位于 $OCAPROOT/bin/$OCAPTC/env 中,如果您在安装 OCAP RI 时使用默认路径,则这个位置为 /CableLabs/tru2way/ocap-ri/ocap/bin/CableLabs/simulator/Win32/debug/env。

类路径应该在这个文件的顶部附近定义。只需在前面添加 usr/HelloOCAP 目录,如清单 5 所示。同样,为了便于阅读,那个很长的行在这里被分割为几行。

清单 5. 更改类路径定义

VMOPT.0=-Djava.class.path=/syscwd/usr/HelloOCAP; 
             /syscwd/sys/ocap-classes.jar; 
             /syscwd/sys/ocap-rez.jar; 
             /syscwd/sys/support.jar; 
             /syscwd/qa/ocap-test.jar; 
             /syscwd/qa/support-test.jar; 
             /syscwd; 
             /syscwd/usr; 
             /syscwd/apps/eas 

下次启动 OCAP RI 时,您将看到应用程序代码开始工作了,如图 1 所示:

图 1. Hello, OCAP!
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

使用 Eclipse 插件

并不是每个人都喜欢使用脚本和命令行。幸运的是,OCAP RI 项目提供了一个优秀的替代方案 — 一个 Eclipse 插件,它能够处理大量繁琐的细节问题,让您集中精力编写应用程序代码。

OCAP RI 项目将这个插件称为 <tru2way> Workbench (TWB)。要安装 TWB,首先需要安装 Eclipse,然后告知 Eclipse 到哪里可以找到 TWB,最后告知 TWB 到哪里可以找到 OCAP RI。

安装和运行 Eclipse

要使用 TWB,建议使用 Eclipse 的一个特殊版本:Eclipse for Java Developers 3.4.2 Ganymede SR2。Eclipse 下载文件是一个 zip 文件(大约 85MB)。要安装 Eclipse,只需解压缩这个文件。我将其放置到 C:/eclipse 中。

运行 c:/eclipse/eclipse.exe,启动 Eclipse。Eclipse 将询问您要在哪里放置一个工作空间,工作空间只是 Eclipse 用于保存设置和文件的位置。我选择的是 c:/eclipse-workspace,但您可以选择任意位置。

安装 TWB

Eclipse 启动并运行后,从菜单选择 Help > Software Updates...。单击 Available Software 选项卡。单击 Add Site... 并输入以下 URL:

http://ri.opencable.com/sdk/updates/eclipse.3.4.2/stable/latest/ 

单击 OK 后,Eclipse 将询问 OpenCable Web 站点,找到 TWB,并在列表中显示它,如图 2 所示。

图 2. 添加 TWB
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

查看原图(大图)

选中 tru2way Workbench Feature 并单击 Install...。Eclipse 将等待一会儿,下载 TWB,然后请求您确认安装(如图 3 所示):

图 3. 确认 TWB 安装
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

查看原图(大图)

单击 Next >。查看许可协议,选择 I accept the terms of the license agreement,单击 Finish。Eclipse 完成 TWB 安装,并询问是否希望重新启动 Eclipse。这是个不错的主意,因此单击 Yes。

注册 OCAP RI

您几乎已经准备就绪,可以开始构建 OCAP 应用程序了。下一步是告知 Eclipse 关于 OCAP RI 位置的信息,以便可以使用它来运行应用程序。这个 OCAP RI 就是您在本系列的 第 1 部分 中下载并安装的。Eclipse 将把应用程序安装到 OCAP RI 中并为您启动它。

从 Eclipse 菜单选择 Window > Preferences。在左边的列表中,选择 RI Bundle Registry。单击 New... 并选择一个名为 RIBundleManifest.xml 的文件。

如果 OCAP RI 安装到默认位置,则这个文件的路径是 c:\CableLabs\tru2way\ocap-ri\twb_support\RIBundleManifest.xml。定位这个文件后,单击 Open,然后单击 OK。

恢复 mpeenv.ini

最后,如果您跟随本文 第 1 部分 的操作,则需要撤销对 mpeenv.ini 中的类路径的更改。删除 mpeenv.ini 中的类路径定义前面的 /syscwd/usr/HelloOCAP。

创建一个新项目

最后,所有组件都已就绪,可以使用 Eclipse 创建一个新的 OCAP 应用程序了。

首先创建一个新项目。从 Eclipse 菜单选择 File > New > Project...。现在打开 OCAP 项目并选择 New OCAP Project。单击 Next >。

输入 HelloOCAP 作为 Project name。单击 Next >,选择 Hello World Template 并单击 Finish。

Eclipse 将建立整个项目,其中包括一个 Xlet 类,名为 org.ocapproject.xlet.HelloWorld。您需要做的就是为 OCAP RI 进行设置。

创建一个服务配置

从 Eclipse 菜单选择 Run > Package Services > Open Services Dialog...。在本质上,您将设置进入 hostapps.properties 文件的字段。

在左边的列表中,选择 Xlet Service Configurations 并单击 new 图标,如图 4 所示。

图 4. new 图标
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

表 1 列示了匹配这个示例的值:

表 1. 创建一个服务配置

条目
Application Name HelloOCAP
Application ID 0x5025
Organization ID 0x1
Control Code Autostart
Visibility Visible
Type Unbound
Base Directory C:/eclipse-workspace/HelloOCAP/bin
注意,如果您为 Eclipse 工作空间选择了不同的位置,那么您可能会拥有不同的项目路径。
Xlet Class org.ocapproject.xlet.HelloWorld

填充这些字段后,单击 Apply,然后单击 Package。

创建一个运行配置

最后一步是告知 Eclipse 您要使用刚才创建的服务配置(类似于一个 hostapps.properties 文件)。执行这个操作的方法称为一个运行配置。

从 Eclipse 菜单选择 Run > Run Configurations。选择 OCAP Simulation 并单击 new 图标。

键入 Hello-1-run-configuration 作为 Name。单击 Unbound Xlets,然后单击 Add...。在下拉列表框中,选择刚才创建的服务配置:HelloOCAP-service-configuration。

单击 Apply,然后单击 Run。OCAP RI 将弹出,稍等片刻,屏幕上将显示一个简单的 “Hello World!”。

要正确停止 OCAP RI,从 Eclipse 菜单选择 TWB > Stop Emulator。

理解开发循环

要理解这个开发循环,可以在源代码中进行一个更改,然后在 OCAP RI 上运行修改后的 Xlet。

在 Eclipse 欢迎屏幕内,单击 workbench 图标,如图 5 所示:

图 5. Eclipse 的 workbench 图标
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

在 HelloOCAP 项目中,展开 src,然后展开 org.ocapproject.xlet。双击 HelloWorld.java,在源代码编辑器中打开它。

对源代码进行一些更改。(一个简单的更改是修改 HELLOWORLD_STR 的定义。)保存文件,从 Eclipse 菜单选择 Run > Run History > HelloOCAP-run-configuration。Eclipse 将负责重新构建这个项目,正确对其打包,并启动 OCAP RI。您将立即看到您的更改。

使用调试器

Eclipse 支持设置断点,逐步调试代码,检查变量,以及执行其他有用的操作。为此,您只需创建一个 debug 配置文件而不是一个 run 配置文件,它们的创建过程几乎完全相同。

从 Eclipse 菜单选择 Run > Debug Configurations。您将看到,运行配置已经在左边的列表中创建。选择 OCAP Simulation 并单击 new 图标。

键入 HelloOCAP-debug-configuration 作为 Name。单击 Unbound Xlets,然后单击 Add...。在下拉列表框中,选择刚才创建的服务配置:HelloOCAP-service-configuration。

单击 Apply,然后单击 Close。

运行之前,在源代码中创建一个断点,以便您能够看到运行中的调试。假设您想调试 HelloWorld 中的用户界面创建。滚动代码编辑器到达第 198 行,这是 initGUI() 方法的第 1 行。在文本区域左边的深灰色槽中,双击创建一个断点。这个断点看起来就像一个蓝色小圆圈,如图 6 所示:

图 6. 设置一个断点
OCAP 入门,第 2 部分: 为 OCAP RI 编写应用程序

现在启动调试器。再次选择 Run > Debug Configurations,选择 HelloOCAP-debug-configuration,然后单击 Debug。OCAP RI 启动,调试器命中您的断点,Eclipse 询问是否希望打开 Debugger 透视图。选中 Remember my decision 并单击 Yes。

调试器显示所有正在运行的线程列表,您可以在这里检查变量,这里也是可以逐步执行源代码的另一个位置。使用工具栏中的图标逐步执行代码,进入代码,或者继续执行。

要了解关于如何使用 Eclipse 和调试器的更多信息,请参阅 Eclipse 文档。

操作完成后,与前面一样,使用 TWB > Stop Emulator 关闭 OCAP RI。

第 2 部分总结

本文介绍如何针对 OCAP 设备创建自己的应用程序,并使用 OCAP RI 在桌面计算机上运行这些应用程序。尽管可以通过命令行来完成这个任务,但有一个 Eclipse 插件可以简化这个过程。使用 Eclipse,您还可以利用优秀的调试功能。

现在,您对 OCAP 的作用和实现您的想法所需的工具已有所了解。OCAP 在 CDC/FP/PBP 中的基础表示您可以使用一个丰富的 API 调色板来构建您的应用程序。您可以继续进行一些美妙的尝试!请您继续关注第 3 部分,以便深入研究 OCAP RI 源代码。

本文示例源代码或素材下载

Tags:OCAP 入门 部分

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接