使用Timer和TimerTask实现欢迎界面

本文介绍如何使用Java的Timer和TimerTask实现程序欢迎界面。Timer相当于计时器,TimerTask用于实现任务。程序未用MVC模式,通过SplashScreen显示欢迎界面、ShowMainScreen进入主界面,还给出了相关类的代码及运行程序的Midlet。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:magic003 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=938

欢迎界面是在程序启动时用来显示产品(如logo,名称),作者,版本等信息的界面。当用户按下任意键,或经过一定时间后,欢迎界面会自动消失,进入程序的主界面。很多程序都设有欢迎界面,尤其是游戏软件。本文将介绍如何使用Timer和TimerTask来实现一个欢迎界面。
首先来看一下Timer和TimerTask这两个类。在java.util这个包中可以找到这两个类。Timer直接从Object继承,它相当于一个计时器,能够用它来指定某个时间来执行一项任务,或者每隔一定时间间隔反复执行同一个任务。创建一个Timer后,就会生成一个线程在背后运行,来控制任务的执行。而TimerTask就是用来实现某项任务的类,它实现了Runnable接口,因此相当于一个线程。更多相关的知识请参见JDK文档。
由于此程序比较简单,因此没有使用MVC模式,而对于有很多界面的程序,使用MVC模式会比较方便。程序中用来实现欢迎界面功能的只有两个类:SplashScreen.java和ShowMainScreen.java。SplashScreen的功能是显示欢迎界面,ShowMainScreen则是进入程序主界面的任务。
首先来看一下SplashScreen这个类。因为用来显示欢迎图片,所以它从Canvas继承。它的主要任务是绘制欢迎界面,同时它还初始化了一个Timer,作为定时器。其中的dismiss()方法用来取消Timer,同时显示主界面。

以下是引用片段:
publicvoiddismiss(){
timer.cancel();//取消定时器
next=newTextBox("welcome","Welcometocomehere!",40,TextField.ANY);
display.setCurrent(next);
}

在用户按下任意键后进入主界面,因此keyPressed()方法直接调用了dimiss()方法。

以下是引用片段:
protectedvoidkeyPressed(intkey){
dismiss();
}

SplashScreen的完整代码如下:
SplashScreen.java

以下是引用片段:
packagesplash.welcome.view;


importjava.io.IOException;
importjava.util.Timer;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Graphics;
importjavax.microedition.lcdui.Image;
importjavax.microedition.lcdui.TextBox;
importjavax.microedition.lcdui.TextField;


/**
*@authorAdministrator
*
*欢迎界面的类
*/
publicclassSplashScreenextendsCanvas{
privateDisplaydisplay;

/**
*程序的主界面
*/
privateTextBoxnext;

/**
*定时器,一定时间后自动跳到主界面
*/
privateTimertimer;

/**
*最长的停留时间
*/
privatefinalintMAX_TIME=3000;

privateImageimage;
privateStringfile="/res/splash.png";

/**
*完成初始化工作
*@paramdisplay
*/
publicSplashScreen(Displaydisplay){
super();
this.display=display;
timer=newTimer();
loadImage();
display.setCurrent(this);
/**
*设置定时器
*/
timer.schedule(newShowMainScreen(this),MAX_TIME);
}

/**
*取消定时器,显示下一个页面
*
*/
publicvoiddismiss(){
timer.cancel();
next=newTextBox("welcome","Welcometocomehere!",40,TextField.ANY);
display.setCurrent(next);
}

protectedvoidpaint(Graphicsg){
g.drawImage(image,0,0,Graphics.LEFT|Graphics.TOP);
}
/**
*用户按下任意键后即进入程序的主界面
*/
protectedvoidkeyPressed(intkey){
dismiss();
}
/**
*载入图像
*
*/
privatevoidloadImage(){
try{
image=Image.createImage(file);
}catch(IOExceptione){
e.printStackTrace();
}
}
}

接下来看一下完成进入主界面任务的类:ShowMainScreen。它是从TimerTask继承的。一个SplashScreen的对象作为其构造函数的参数传递进来。由于仅仅是取消定时器,显示主界面,因此在run()方法中只是简单的调用了SplashScreen的dismiss()方法。

以下是引用片段:
publicvoidrun(){
splash.dismiss();
}

ShowMainScreen的完整代码如下:
ShowMainScreen.java

以下是引用片段:
packagesplash.welcome.view;
importjava.util.TimerTask;
/**
*@authorAdministrator
*
*跳过欢迎界面,进入主界面的类
*/
publicclassShowMainScreenextendsTimerTask{
privateSplashScreensplash;

publicShowMainScreen(SplashScreensplash){
this.splash=splash;
}

publicvoidrun(){
splash.dismiss();
}
}

另外,有一个Midlet来运行这个程序:

SplashMidlet.java

以下是引用片段:
packagesplash.welcome.midlet;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Display;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
importsplash.welcome.view.SplashScreen;
/**
*@authorAdministrator
*
*进入程序的Midlet
*/
publicclassSplashMidletextendsMIDlet{
privateDisplaydisplay;

/**
*欢迎界面
*/
privateCanvassplash;

publicSplashMidlet(){
super();
display=Display.getDisplay(this);
}
protectedvoidstartApp()throwsMIDletStateChangeException{
splash=newSplashScreen(display);
}
protectedvoidpauseApp(){
}
protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值