日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

J2ME Timer 使用指南_JSP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:J2ME開發(fā)站點資源
英文站點 SUN J2ME WebSite http://java.sun.com/j2me/ 英文好的開發(fā)者應(yīng)該收藏的站點。 諾基亞開發(fā)論壇 http://discussion.forum.nokia.com/forum/ IBM alphaworks http

J2SE 1.3 里有一項新的改進,那就是提供了一個可以更簡單的實現(xiàn)多任務(wù)調(diào)度執(zhí)行的定時器類,調(diào)度由一個后臺線程完成。MIDP 同樣也包含了這一改進,使得 J2ME 開發(fā)人員從中受益。

J2ME 提示了兩個類用來定義和調(diào)試任務(wù), 他們分別是 TimerTask 和 Timer。TimerTask 是用戶定義的需要被調(diào)度的所有任務(wù)的抽象基類。Timer 類在任務(wù)執(zhí)行的時候負(fù)責(zé)創(chuàng)建和管理執(zhí)行線程。

要定義一個任務(wù),定義一個 TimerTask 的子類,并實現(xiàn) run 方法。例如

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



是不是覺得 run 方法很熟悉呢?那是因為 TimerTask 實現(xiàn)了 java.lang.Runnable 接口。 Timer 類調(diào)用這個 run 方法來執(zhí)行各個任務(wù)。此外還有一點必須注意到,那就是每個 run 方法所執(zhí)行的任務(wù)必須能夠盡快的終止,因為每個 Timer 對象在同一時間只能執(zhí)行一個任務(wù)。

定義好一個任務(wù)以后,你可以生成一個 Timer 對象并調(diào)用 schedule 方法來調(diào)度它,就像下面的代碼演示的那樣:

import java.util.*; Timer timer = new Timer(); TimerTask task = new MyTask(); // 在執(zhí)行這個任務(wù)前等待十秒... timer.schedule( task, 10000 ); // 在執(zhí)行任務(wù)前等待十秒,然后每過十秒再執(zhí)行一次 timer.schedule( task, 5000, 10000 );



schedule 方法被重載了四次;每一個任務(wù)都可以在一個特定的時間點(使用一個 Date 對象指定)或者延時特定的時間段(以毫秒為單位)之后執(zhí)行。你可以安排這個任務(wù)只執(zhí)行一次或者在一段特定的時間段里反復(fù)執(zhí)行。Timer 還提供了一個 scheduleAtFixedRate 方法來根據(jù)該任務(wù)第一次執(zhí)行的時間來指定反復(fù)執(zhí)行時延長的時間段。如果一個任務(wù)被延時了,被安排在后面執(zhí)行的任務(wù)就被相應(yīng)的縮短等待時間以“接上”被延時的任務(wù)。

每個 Timer 對象都會創(chuàng)建和管理一個后臺線程。一般情況下,一個程序創(chuàng)建一個 Timer 就夠了,當(dāng)然也可以根據(jù)需要創(chuàng)建任意多個。你還可以在任何時候停止一個 Timer 并終止后臺線程,方法是調(diào)用 cancel 方法。但要注意的是,一旦 Timer 并終止了,就不可能再恢復(fù)執(zhí)行,除非你重新生成一個 Timer 對象并重新安排你想要執(zhí)行的任務(wù)。Timer 對象是線程安全的,你可以在多線程的環(huán)境下直接訪問 Timer 對象,而不用任何顯式的同步處理。

另外,每個任務(wù)提供了一個 cancel 方法(繼承自 TimerTask 基類),你可以在任務(wù)執(zhí)行的過程當(dāng)中調(diào)用該方法來終止該任務(wù)。一旦你終止了該任務(wù),那么它將退出任務(wù)調(diào)度。你可以在任何時間調(diào)用每個任務(wù)的 cancel 方法來終止該任務(wù)的執(zhí)行,哪怕該任務(wù)還一次都沒有執(zhí)行過。

下面提供了一個簡示的 MIDlet 示例來演示 Timer 的使用,我們將利用定時器來模擬一個星空移動的效果。星星用一個點來表示,這使用到了低界圖形 API。關(guān)于低界圖形 API 更詳細(xì)的介紹,請參考我的另一篇文章《使用 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 來調(diào)度執(zhí)行一個 TimerTask 任務(wù) FieldMover,時間間隙 100 毫秒。FieldMover 處理星空的更新并重繪任務(wù),使得整個星空不斷得往屏幕下方“延伸”。這樣就生成了一個簡單的星空移動的效果。

  

分享:J2ME開發(fā)步驟
1. 系統(tǒng)要求 Pentium 100以上CPU 64MB 內(nèi)存 Windows NT Workstation 4.0(Service Pack 3)或Windows 98 6 MB自由硬盤空間 Java 2 SDK, Standard Version, 版本1.2.2或者更高

來源:模板無憂//所屬分類:JSP教程/更新時間:2008-08-22
相關(guān)JSP教程