活着的死人 发表于 2015-1-18 11:36:16

JAVA编程:J2ME Timer 利用指南

还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。J2SE1.3里有一项新的改善,那就是供应了一个能够更复杂的完成多义务调剂实行的准时器类,调剂由一个背景线程完成。MIDP一样也包括了这一改善,使得J2ME开辟职员从中受害。

J2ME提醒了两个类用来界说和调试义务,他们分离是TimerTask和Timer。TimerTask是用户界说的必要被调剂的一切义务的笼统基类。Timer类在义务实行的时分卖力创立和办理实行线程。

要界说一个义务,界说一个TimerTask的子类,并完成run办法。比方

importjava.util.*;

publicclassMyTaskextendsTimerTask
{
publicvoidrun()
{
System.out.println("Runningthetask");
}
}



是否是以为run办法很熟习呢?那是由于TimerTask完成了java.lang.Runnable接口。Timer类挪用这个run办法来实行各个义务。别的另有一点必需注重到,那就是每一个run办法所实行的义务必需可以尽快的停止,由于每一个Timer对象在统一工夫只能实行一个义务。

界说好一个义务今后,你能够天生一个Timer对象并挪用schedule办法来调剂它,就像上面的代码演示的那样:

importjava.util.*;

Timertimer=newTimer();
TimerTasktask=newMyTask();

//在实行这个义务前守候十秒...
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》。

importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
importjava.util.*;

publicclassTimerDemoextendsMIDlet{

Displaydisplay;
StarFieldfield=newStarField();
FieldMovermover=newFieldMover();
Timertimer=newTimer();

publicTimerDemo(){
display=Display.getDisplay(this);
}

protectedvoiddestroyApp(booleanunconditional){
}

protectedvoidstartApp(){
display.setCurrent(field);
timer.schedule(mover,100,100);
}

protectedvoidpauseApp(){
}

publicvoidexit(){
timer.cancel();//stopscrolling
destroyApp(true);
notifyDestroyed();
}

classFieldMoverextendsTimerTask{
publicvoidrun(){
field.scroll();
}
}

classStarFieldextendsCanvas{
intheight;
intwidth;
int[]stars;
Randomgenerator=newRandom();
booleanpainting=false;

publicStarField(){
height=getHeight();
width=getWidth();
stars=newint;

for(inti=0;i<height;++i){
stars=-1;
}
}

publicvoidscroll(){
if(painting)return;

for(inti=height-1;i>0;--i){
stars=stars;
}

stars=(generator.nextInt()%
(3*width))/2;
if(stars>=width){
stars=-1;
}

repaint();
}

protectedvoidpaint(Graphicsg){
painting=true;

g.setColor(0,0,0);
g.fillRect(0,0,width,height);

g.setColor(255,255,255);

for(inty=0;y<height;++y){
intx=stars;
if(x==-1)continue;

g.drawline(x,y,x,y);
}

painting=false;
}

protectedvoidkeypressed(intkeycode){
exit();
}
}
}



TimerDemoMIDlet利用了一个Timer对象timer来调剂实行一个TimerTask义务FieldMover,工夫间隙100毫秒。FieldMover处置星空的更新偏重绘义务,使得全部星空不休得往屏幕下方“延长”。如许就天生了一个复杂的星空挪动的效果。


再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。

简单生活 发表于 2015-1-21 10:48:03

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

第二个灵魂 发表于 2015-1-27 06:08:52

是一种语言,用以产生「小应用程序(Applet(s))

灵魂腐蚀 发表于 2015-2-4 23:45:21

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

小女巫 发表于 2015-2-10 23:00:44

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

精灵巫婆 发表于 2015-3-1 17:08:28

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

飘灵儿 发表于 2015-3-6 05:34:49

至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。

活着的死人 发表于 2015-3-6 18:06:51

任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言

谁可相欹 发表于 2015-3-11 09:09:19

是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能

山那边是海 发表于 2015-3-18 02:11:19

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

因胸联盟 发表于 2015-3-25 07:27:17

Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台

蒙在股里 发表于 2015-4-8 09:34:36

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

小妖女 发表于 2015-4-13 19:26:37

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

老尸 发表于 2015-4-15 05:33:13

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

柔情似水 发表于 2015-4-16 20:10:30

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

兰色精灵 发表于 2015-4-21 06:30:47

《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。

只想知道 发表于 2015-4-28 18:52:14

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

爱飞 发表于 2015-4-29 20:37:14

多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

愤怒的大鸟 发表于 2015-5-6 14:18:20

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

仓酷云 发表于 2015-6-18 21:43:55

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
页: [1]
查看完整版本: JAVA编程:J2ME Timer 利用指南