关闭顶部展开顶部

J2ME Timer 使用指南_JSP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:J2ME开发站点资源
英文站点 SUN J2ME WebSite http://java.sun.com/j2me/ 英文好的开发者应该收藏的站点。 诺基亚开发论坛 http://discussion.forum.nokia.com/forum/ IBM alphaworks http

J2SE 1.3 里有一项新的改进,那就是提供了一个可以更简单的实现多任务调度执行的定时器类,调度由一个后台线程完成。MIDP 同样也包含了这一改进,使得 J2ME 开发人员从中受益。

J2ME 提示了两个类用来定义和调试任务, 他们分别是 TimerTask 和 Timer。TimerTask 是用户定义的需要被调度的所有任务的抽象基类。Timer 类在任务执行的时候负责创建和管理执行线程。

要定义一个任务,定义一个 TimerTask 的子类,并实现 run 方法。例如

import java.util.*; public class MyTask extends TimerTask { public void run() { System.out.println( "Running the task" ); } }



是不是觉得 run 方法很熟悉呢?那是因为 TimerTask 实现了 java.lang.Runnable 接口。 Timer 类调用这个 run 方法来执行各个任务。此外还有一点必须注意到,那就是每个 run 方法所执行的任务必须能够尽快的终止,因为每个 Timer 对象在同一时间只能执行一个任务。

定义好一个任务以后,你可以生成一个 Timer 对象并调用 schedule 方法来调度它,就像下面的代码演示的那样:

import java.util.*; Timer timer = new Timer(); TimerTask task = new MyTask(); // 在执行这个任务前等待十秒... timer.schedule( task, 10000 ); // 在执行任务前等待十秒,然后每过十秒再执行一次 timer.schedule( task, 5000, 10000 );



schedule 方法被重载了四次;每一个任务都可以在一个特定的时间点(使用一个 Date 对象指定)或者延时特定的时间段(以毫秒为单位)之后执行。你可以安排这个任务只执行一次或者在一段特定的时间段里反复执行。Timer 还提供了一个 scheduleAtFixedRate 方法来根据该任务第一次执行的时间来指定反复执行时延长的时间段。如果一个任务被延时了,被安排在后面执行的任务就被相应的缩短等待时间以“接上”被延时的任务。

每个 Timer 对象都会创建和管理一个后台线程。一般情况下,一个程序创建一个 Timer 就够了,当然也可以根据需要创建任意多个。你还可以在任何时候停止一个 Timer 并终止后台线程,方法是调用 cancel 方法。但要注意的是,一旦 Timer 并终止了,就不可能再恢复执行,除非你重新生成一个 Timer 对象并重新安排你想要执行的任务。Timer 对象是线程安全的,你可以在多线程的环境下直接访问 Timer 对象,而不用任何显式的同步处理。

另外,每个任务提供了一个 cancel 方法(继承自 TimerTask 基类),你可以在任务执行的过程当中调用该方法来终止该任务。一旦你终止了该任务,那么它将退出任务调度。你可以在任何时间调用每个任务的 cancel 方法来终止该任务的执行,哪怕该任务还一次都没有执行过。

下面提供了一个简示的 MIDlet 示例来演示 Timer 的使用,我们将利用定时器来模拟一个星空移动的效果。星星用一个点来表示,这使用到了低界图形 API。关于低界图形 API 更详细的介绍,请参考我的另一篇文章《使用 MIDP 的低界用户界面 API》。

import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.util.*; public class TimerDemo extends MIDlet { Display display; StarField field = new StarField(); FieldMover mover = new FieldMover(); Timer timer = new Timer(); public TimerDemo() { display = Display.getDisplay( this ); } protected void destroyApp( boolean unconditional ) { } protected void startApp() { display.setCurrent( field ); timer.schedule( mover, 100, 100 ); } protected void pauseApp() { } public void exit(){ timer.cancel(); // stop scrolling destroyApp( true ); notifyDestroyed(); } class FieldMover extends TimerTask { public void run(){ field.scroll(); } } class StarField extends Canvas { int height; int width; int[] stars; Random generator = new Random(); boolean painting = false; public StarField(){ height = getHeight(); width = getWidth(); stars = new int[ height ]; for( int i = 0; i < height; i ){ stars[i] = -1; } } public void scroll() { if( painting ) return; for( int i = height-1; i > 0; --i ){ stars[i] = stars[i-1]; } stars[0] = ( generator.nextInt() % ( 3 * width ) ) / 2; if( stars[0] >= width ){ stars[0] = -1; } repaint(); } protected void paint( Graphics g ){ painting = true; g.setColor( 0, 0, 0 ); g.fillRect( 0, 0, width, height ); g.setColor( 255, 255, 255 ); for( int y = 0; y < height; y ){ int x = stars[y]; if( x == -1 ) continue; g.drawline( x, y, x, y ); } painting = false; } protected void keypressed( int keycode ){ exit(); } } }

TimerDemo MIDlet 使用了一个 Timer 对象 timer 来调度执行一个 TimerTask 任务 FieldMover,时间间隙 100 毫秒。FieldMover 处理星空的更新并重绘任务,使得整个星空不断得往屏幕下方“延伸”。这样就生成了一个简单的星空移动的效果。

  

分享:J2ME开发步骤
1. 系统要求 Pentium 100以上CPU 64MB 内存 Windows NT Workstation 4.0(Service Pack 3)或Windows 98 6 MB自由硬盘空间 Java 2 SDK, Standard Version, 版本1.2.2或者更高

来源:模板无忧//所属分类:JSP教程/更新时间:2008-08-22
loading.. 评论加载中....
相关JSP教程
闂佹眹鍩勯崹閬嶆偤閺囶澁缍栭柛鈩冪⊕閳锋帗銇勯弴妤€浜惧銈忕秶閹凤拷
濠电偛顕慨顓㈠磻閹炬枼妲堥柡鍌濇硶婢ф稒淇婇懠顒夆偓婵嬫煟閵忊晛鐏查柟鍑ゆ嫹
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径瀣閻庣懓瀚竟鍡欐崲娑斾線鏌i姀鈺佺伈闁瑰嚖鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勵吋闂佽鍨庨崟顓фК闂佽閰eḿ褍螞濞戙垺鍋夐柨鐕傛嫹
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ帒鍊哥敮鍫曞箹鐎涙ḿ鐭掔€规洘绻堥弫鎾绘晸閿燂拷
闂備胶枪缁绘劙骞婃惔銊ョ劦妞ゆ巻鍋撻柛姘儑缁﹪鏁傞崜褏鐓撻柣搴岛閺呮繈鎯屽▎鎴犵=濞撴艾锕ョ€氾拷
闂備浇銆€閸嬫挻銇勯弽銊р槈闁伙富鍣i弻娑樷攽閹邦亞鑳虹紓浣靛妽濡炶棄顕i妸鈺婃晬婵炲棙鍨电粭锟犳⒑閸濆嫬鈧骞婇幘鑸殿潟闁跨噦鎷�
闂備礁鎼崯鐗堟叏妞嬪海绀婂鑸靛姈閻擄綁鎮规潪鎷岊劅婵炲眰鍊曢湁闁挎繂妫欑粈鈧梺鍛娚戦悧鐘茬暦閹扮増鏅搁柨鐕傛嫹
婵犵妲呴崹顏堝礈濠靛棭鐔嗘俊顖氬悑鐎氱粯銇勯幘瀵哥畺閻庢熬鎷�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓奸崶銊ヮ伕濡炪倖鎸荤换鍐偓姘虫珪娣囧﹪顢涘Δ鈧晶鍙夌節椤喗瀚�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洦鍓熼、娆撳礂閻撳簶鍋撻悽鍛婄厸闁割偅绻勫瓭婵犳鍣幏锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾闁哄苯鎳橀崺鈧い鎺嗗亾闁宠閰i獮鎴﹀箛闂堟稒顔嗛梻浣告惈鐎氭悂骞忛敓锟�
婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎规洩缍侀獮瀣攽閸偂绱�
濠电姷顣介埀顒€鍟块埀顒勵棑缁辩偛顓兼径濠勭厬闂佺懓鐡ㄧ换鍕敂鐎涙ü绻嗘い鏍殔婢у弶绻濋~顔藉
闂佽楠搁崢婊堝礈濠靛鍋嬮柟鎯版閻鈹戦悩鎻掓殭闁奸潧缍婇弻銈夋嚍閵夈儱顫嶉梺缁樼壄缂嶄礁鐣峰▎鎾存櫢闁跨噦鎷�
UB闂備礁婀辩划顖炲礉濡ゅ懐宓侀柛銉㈡櫆鐎氭岸鎮楀☉娅虫垿锝為敓锟�
闂備浇澹堟ご绋款潖婵犳碍鐒鹃悗鐢电《閸嬫捇鐛崹顔句痪濠电姭鍋撻柨鐕傛嫹
闂佽楠哥粻宥夊垂閸濆嫸鑰块柛銏㈠殰
闂備礁鎲″缁樻叏妞嬪海绀婂璺虹灱閸楁碍绻涢崱妤€顒㈤柛鐐差槹缁绘稓绱欓悩鍝勫帯闂佺ǹ楠忛幏锟�
缂傚倸鍊烽悞锕傛偡閿曞倸鍨傛繝濠傚椤╅攱銇勯幒宥囶槮缂佹彃婀遍埀顒傚仯閸婃繄绱撳棰濇晩闁跨噦鎷�
©2017 www.mb5u.com婵犵妲呴崹顏堝礈濠靛棭鐔嗘慨妞诲亾鐎殿噮鍣i幃鈺呭箵閹烘挸鐦�
闂備浇銆€閸嬫捇鏌熼婊冾暭妞ゃ儻鎷�&闂備礁鎲$敮鎺懳涢弮鍫燁棅闁跨噦鎷�