在J2ME程序加入暂停功能——附实现源代码
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
在手机程序运行过程中,因为手机来电等事件,需要暂停手机程序的执行,下面就简单的介绍一下该功能的程序实现。
实现该功能需要了解MIDlet的生命周期,在手机来电时,系统会自动调用MIDlet子类中的pauseApp方法,在电话结束时会自动调用startApp重新启动程序,所以我们只需要将处理的代码放在这两个方法内部就可以。
而Nokia在实现时没有严格按照MIDlet的生命周期来实现,所以Nokia系列的手机在实现暂停功能的时候,需要在Canva类中覆盖hideNotify和showNotify方法,其中hideNotify会自动在Canvas不可见的时候被系统调用,showNotify会自动在Canvas可见时被系统调用。
实现暂停功能的原理就是在手机来电的时候停止线程,在电话结束的时候继续开始线程。
下面是一个实现的代码,该代码主界面中实现的是一个不断变大的数字,可以使用在手机来电的时候会自动暂停。该代码在Nokia 6020手机上测试通过。程序中包含三个源文件:PauseMIDlet是MIDlet类文件,MenuList是项目中的游戏功能选择界面,PauseCanvas是程序主界面。下面是程序的源代码:
// 文件名:PauseMIDlet.java
package pausegame;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class PauseMIDlet extends MIDlet {
static PauseMIDlet instance;
MenuList displayable = new MenuList(this);
public PauseMIDlet() {
instance = this;
}
public void startApp() {
//获得当前显示的界面对象
Displayable current = Display.getDisplay(this).getCurrent();
//如果当前界面对象不为空且为PauseCanvas类型,即为暂停动作
if(current != null && current instanceof PauseCanvas){
//启动游戏
((PauseCanvas)current).start();
}else{
//显示游戏界面
Display.getDisplay(this).setCurrent(displayable);
}
}
public void pauseApp() {
Displayable current = Display.getDisplay(this).getCurrent();
if(current != null && current instanceof PauseCanvas){
//暂停游戏
((PauseCanvas)current).pause();
}
}
public void destroyApp(boolean unconditional) {
}
public static void quitApp() {
instance.destroyApp(true);
instance.notifyDestroyed();
instance = null;
}
}
//文件名:MenuList.java
package pausegame;
import javax.microedition.lcdui.*;
public class MenuList extends List implements CommandListener {
private final PauseMIDlet midlet;
private Command cmdOK;
public MenuList(PauseMIDlet midlet) {
super("主菜单", List.IMPLICIT);
this.midlet = midlet;
append("新游戏",null);
append("退出",null);
cmdOK = new Command("确定",Command.OK,1);
addCommand(cmdOK);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == cmdOK) {
//获得用户的选择
int index = this.getSelectedIndex();
//根据选择显示不同的界面
if(index == 0){
PauseCanvas pc = new PauseCanvas();
Display.getDisplay(midlet).setCurrent(pc);
pc.start();
}else{
PauseMIDlet.quitApp();
}
}
}
}
//文件名:PauseCanvas.java
package pausegame;
import javax.microedition.lcdui.*;
public class PauseCanvas extends Canvas implements Runnable{
private Thread thread;
private int i = 0;
private int width;
private int height;
public PauseCanvas() {
width = this.getWidth();
height = this.getHeight();
}
protected void paint(Graphics g) {
g.setColor(255,0,0);
g.fillRect(0,0,width,height);
g.setColor(0,0,0);
g.drawString(String.valueOf(i),30,30,Graphics.LEFT | Graphics.TOP);
}
public void start(){
thread = new Thread(this);
thread.start();
}
public void pause(){
thread = null;
}
public void showNotify(){
if(thread == null){
//启动程序
start();
}
}
public void hideNotify(){
//暂停程序
pause();
}
public void run(){
Thread current = Thread.currentThread();
while(current == thread){
try{
Thread.sleep(200);
}catch(Exception e){
}
i++;
repaint();
}
}
}
分享到:
相关推荐
源代码会包含各种类,如GameLoop(游戏循环)、GameBoard(游戏板)、Block(方块)、InputHandler(输入处理器)等,每个类都有其特定的责任,共同协作以实现游戏的功能。 在学习和分析提供的"俄罗斯方块源程序"时...
在本文中,我们将深入探讨J2ME(Java 2 Micro Edition)手机软件开发,并通过提供的三个源代码示例——备忘录应用、设计文档以及音乐播放器,来解析和理解J2ME编程的关键概念和实践。 J2ME是Java平台的一个版本,专...
本文将深入探讨一个基于J2ME的手机游戏——“推箱子”的源代码,旨在帮助开发者了解如何利用J2ME进行游戏开发,学习其中的编程技巧和逻辑处理。 1. **J2ME基础** J2ME由MIDP(Mobile Information Device Profile)...
在源代码中,我们可以看到如何使用J2ME的图形库来绘制游戏场景,创建动态的角色和物体,以及实现基本的物理运动模拟。 1. 角色控制:玩家通过键盘或触摸屏控制主角移动,源码中会包含对按键事件的监听和响应机制。...
【标题】"基于j2me的手机游戏源代码"涵盖了移动设备上开发游戏的重要技术——Java 2 Micro Edition (J2ME)。J2ME是一个Java平台,专门用于嵌入式系统,包括早期的智能手机和平板电脑。它由Java ME应用框架、可下载的...
在这个压缩包中,包含的是一个基于J2ME实现的经典游戏——俄罗斯方块的源代码。 俄罗斯方块是一款全球闻名的益智游戏,其基本原理是不同形状的方块从屏幕顶部落下,玩家需要通过旋转和横向移动来排列它们,使得同一...
通过研究这些源代码,我们可以了解如何在限制资源的环境中实现复杂的交互逻辑,优化性能,以及构建具有吸引力的2D游戏体验。对于想要深入理解J2ME游戏开发的程序员来说,这是一个不可多得的学习资源。
### J2ME手机游戏设计案例源代码-GameEngine_Record #### 概述 J2ME(Java 2 Micro Edition)是Sun Microsystems推出的一种基于Java的技术标准,主要用于移动设备上的应用程序开发,例如智能手机、PDA等。本文将...
7. **源代码分析**:提供的源代码可能包含一个简单的游戏示例——“贪食蛇”。这是一个经典的移动游戏,用于教授基本的游戏编程概念,如移动对象、碰撞检测和游戏循环。 源代码分析可能涉及以下几个方面: - 游戏...
开源程序J2ME下的空档接龙是一款基于Java 2 Micro Edition (J2ME) 平台开发的经典桌面游戏——空档接龙的实现。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如手机、智能手表等。它提供了丰富的功能,...
本压缩包包含的是一款基于J2ME技术的手机游戏——飞机射击的完整源代码。通过研究这款源代码,开发者可以深入理解J2ME游戏开发的基本原理和技巧。 1. **J2ME架构**:J2ME由配置(Configurations)和 profiles...
本文将深入探讨一款基于J2ME开发的经典游戏——坦克大战,分析其技术实现、设计理念以及对现代移动游戏开发的启示。 一、J2ME概述 J2ME是Java平台的一个子集,专为资源有限的嵌入式设备如移动电话和PDA设计。它...
在本篇讲解中,我们将深入理解J2ME(Java 2 Micro Edition)中的核心概念——MIDlets,以及如何开发和管理这些针对移动设备的应用程序。J2ME是一种Java平台,用于开发和部署在资源有限的设备上运行的软件,如手机、...
【J2ME贪吃蛇源码】是一款基于Java 2 Micro Edition(J2ME)平台开发的经典游戏——贪吃蛇的源代码实现。J2ME是Java为移动设备和嵌入式设备提供的一种轻量级的开发框架,常用于早期的手机游戏和应用开发。 在这款...
在这个特定的项目中,我们看到一个使用J2ME技术在手机上实现的经典游戏——俄罗斯方块。J2ME以其轻量级和跨平台的能力,成为了开发移动游戏的常见选择。 **J2ME框架** J2ME由几个关键组件构成,包括KVM(K Virtual...
总结来说,这个J2ME版的俄罗斯方块项目展示了如何利用Java技术在移动设备上开发游戏,涉及到图形绘制、用户交互、游戏逻辑等多个方面,对于想要学习J2ME或移动游戏开发的初学者来说,尽管没有源代码,但通过分析和...
在J2ME环境中,开发者通常需要安装Java Development Kit (JDK)来编译Java源代码,然后使用通用J2ME Software Development Kit (SDK)和J2ME IDE(如NetBeans或Eclipse)进行开发和调试。J2ME的虚拟机(KVM,K Java ...
3. **编译与打包**:使用WTK的命令行工具或集成开发环境将源代码编译成.class文件,并打包成.jar和.jad文件。 4. **测试与调试**:在WTK模拟器或实际设备上运行MIDlet,进行功能测试和性能优化。 5. **发布与部署*...
开发基于J2ME的应用程序首先需要明确其真实运行环境——即支持J2ME的4G手机。软件开发流程一般包括在桌面计算机上的模拟阶段,随后再将经过验证的程序移植到目标设备上。为此,开发者需要搭建合适的开发环境: - **...
完成编码后,使用Java编译器(如javac)将源代码编译成字节码文件(.class文件)。确保所有依赖的类都已正确导入。 ##### 步骤4:预验证 预验证是J2ME应用发布前的一个重要步骤,用于确保应用符合CLDC(Connected ...