[JavaME]利用java.util.TimerTask来做Splash Screen的N种方法

简介:

请参考java.util.TimerTask.

TimerTask is something like Timer in VisualBasic. You can sepcify a time period in milliseconds

for your requirement"一幅LOGO显示完以后,几秒种自动显示下一幅LOGO". 
Here is an sample code.

public   void  testTimer()  {
MyTimerTask myTimerTask 
= new MyTimerTask();
Timer timer 
= new Timer();
timer.schedule(myTimerTask, 
500010000); //wait for 5 seconds and then call the function every 

10 seconds
}


class  MyTimerTask  extends  TimerTask  {
public void run() {
//This method will be called every 10 Seconds

Image im 
= Image.createImage(imageData, 0, imageData.length);
if(im == null)
System.out.println(
"NULL IMAGE");
System.out.println(
"The Size of the Byte Array is:" +imageData);
if(frm.size() > 0)
for(int i = 0; i < frm.size(); i++)
frm.delete(i);
frm.append(im);
disp.setCurrent(frm);

}

}

 

 

另外,对于你所说的是不是应该叫做SplashScreen,那么国外曾经有人给出这么一个例子,虽然不是周期性地显示一张又一张的图片,而是利用TimerTask周期性地repaint画布,画出一种Splash Screen的感觉,你可以参考:

import  java.util. * ;

import  javax.microedition.lcdui. * ;

public   class  WaitCanvas
extends  Canvas  {
private int mCount, mMaximum;
private int mInterval;

private int mWidth, mHeight, mX, mY, mRadius;
private String mMessage;

public WaitCanvas() {
mCount 
= 0;
mMaximum 
= 36;
mInterval 
= 100;

mWidth 
= getWidth();
mHeight 
= getHeight();

// Calculate the radius.
int halfWidth = (mWidth - mRadius) / 2;
int halfHeight = (mHeight - mRadius) / 2;
mRadius 
= Math.min(halfWidth, halfHeight);

// Calculate the location.
mX = halfWidth - mRadius / 2;
mY 
= halfHeight - mRadius / 2;

// Create a Timer to update the display.
TimerTask task = new TimerTask() {
public void run() {
mCount 
= (mCount + 1% mMaximum;
repaint();
}

}
;
Timer timer 
= new Timer();
timer.schedule(task, 
0, mInterval);
}


public void setMessage(String s) {
mMessage 
= s;
repaint();
}


public void paint(Graphics g) {
int theta = -(mCount * 180 / mMaximum);


// Clear the whole screen.
g.setColor(255255255);
g.fillRect(
00, mWidth, mHeight);

// Now draw the pinwheel.
g.setColor(000);

g.drawArc(mX, mY, mRadius, mRadius, 
0360);

g.fillArc(mX, mY, mRadius, mRadius, theta 
+ 2020);
//g.fillArc(mX, mY, mRadius, mRadius, theta + 60, 60);
//g.fillArc(mX, mY, mRadius, mRadius, theta + 90, 90);
//g.fillArc(mX, mY, mRadius, mRadius, theta + 120, 120);

// Draw the message, if there is a message.
if (mMessage != null)
g.drawString(mMessage, mWidth 
/ 2, mHeight,
Graphics.BOTTOM 
| Graphics.HCENTER);
}

}



上面那个是利用TimerTask自动定时填充图形来展示Splash Screen的,那么下面这个就是显示图片来Splash Screen了:


 

import  java.util. * ;
import  javax.microedition.lcdui. * ;

public   class  Splash  extends  Canvas  {

private Display display;
private Displayable next;
private Timer timer=new Timer();

public Splash (Display display,Displayable next) {
this.display=display;
this.next=next;
display.setCurrent(
this);
}


protected void showNotify () {
timer.schedule( 
new TimerTask () public void run() {
displayNext(); }
}
,8000);
}


protected void hideNotify() {
timer.cancel();
}


protected void keyPressed (int keycode) {
displayNext();
}


protected void pointerPressed (int x, int y) {
displayNext();
}


private void displayNext() {
display.setCurrent(next);
}
 

protected void paint (Graphics g) {
int height=this.getHeight();
int width=this.getWidth();

// fill background as white
g.setColor(0xFFFFFF);
g.fillRect(
0,0,width,height);

Image logo
=null;
try {
logo
=Image.createImage("/images/logo.png");
}
 catch (Exception ignore) {}

g.drawImage(logo,width
/2,height/2,g.HCENTER|g.VCENTER);
}


}
 

here
' s the calling method in your midlet(it passes the Display and current Displayable):

/**
* This shows the splash
*/


private   void  showSplash ()  {
new Splash (display,MenuList); 
}




还有一种办法是利用currentTimeMillis。
无非就是利用System.currentTimeMillis()+2000先行计算出什么时间该显示

后一幅图片了,如果靠while循环不断检测发现时间到了,就换那张图片。

 

private   boolean  showImage;


void  someMethod()
{
long time = System.currentTimeMillis()+2000;

showImage 
= true;
while(System.currentTimeMillis()<time)
{
repaint();
serviceRepaints();
}

showImage 
= false;
}


public   void  paint()
{

if(showImage)
g.drawImage(img,offsetX,MAX_Y
/2,g.LEFT|g.VCENTER);
}

 

efei说:
“你要做的无非就是一个延时,过一定时间就换一幅图片。至于怎么来判断这个延时,方法多种多样,用线程,用TimerTask,用System.currentTimeMillis(),基本上都一样

个人比较倾向于使用线程作为固定的时钟脉冲来驱动游戏。

对于System.currentTimeMillis(),我只能告诉你两点,一是它的作用是取得当前时间,二呢,用这个方法如果只是简单比较时间,那么如果中断游戏,过一段时间再恢复,就会存在问题。

目录
相关文章
|
3月前
|
前端开发 JavaScript Java
Java 开发中 Swing 界面嵌入浏览器实现方法详解
摘要:Java中嵌入浏览器可通过多种技术实现:1) JCEF框架利用Chromium内核,适合复杂网页;2) JEditorPane组件支持简单HTML显示,但功能有限;3) DJNativeSwing-SWT可内嵌浏览器,需特定内核支持;4) JavaFX WebView结合Swing可完美支持现代网页技术。每种方案各有特点,开发者需根据项目需求选择合适方法,如JCEF适合高性能要求,JEditorPane适合简单展示。(149字)
370 1
|
11天前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
116 4
|
20天前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
73 11
|
16天前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
163 5
|
24天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
2月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
210 46
|
3月前
|
Java 索引
Java ArrayList中的常见删除操作及方法详解。
通过这些方法,Java `ArrayList` 提供了灵活而强大的操作来处理元素的移除,这些方法能够满足不同场景下的需求。
423 30
|
2月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
234 0
|
3月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
144 1
|
2月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
112 0