在J2ME程序加入暂停功能——附实现源代码

在J2ME程序加入暂停功能——附实现源代码

作者:陈跃峰

出自:http://blog.youkuaiyun.com/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();

    }

  }

 

}

J2ME经典游戏源码解析与开发实战 htmltable {th, td {th {pre {简介:J2ME(Java 2 Micro Edition)是专为资源受限设备设计的Java平台,曾广泛应用于早期移动设备的游戏开发。本“J2ME经典游戏源码”压缩包包含多个基于MIDP和CDC架构的小型游戏源代码,涵盖图形绘制、事件处理、游戏循环、对象管理、数据存储等核心技术,适用于学习在低性能设备上的移动游戏开发。 阅读详情

相关推荐

J2ME贪吃蛇游戏源代码深度解析与实战

本文还有配套的精品资源,点击获取 简介:贪吃蛇作为经典手机游戏,其J2ME版本展现了移动游戏开发的基础。本文深入解析了基于J2ME平台的游戏循环、事件处理、图形绘制、游戏逻辑、状态管理以及优化与性能控制的源代码要点,旨在帮助开发者掌握J2ME编程,并提升游戏开发技能。 1. 贪吃蛇游戏简介 简介 贪吃蛇游戏是一个经典的电子游戏,在IT行业具有悠久的历史...

weixin_32242475的博客 898

android是j2me的一个实现吗,J2me和安卓有什么区别

首先从程序上来说的话,基本是没有多少区别的.都是使用JAVA语言开发,使用的框架和类不同而已.一、平台的区别J2me: 开发平台Android: 操作系统二、工程结构比较J2me:Res:资源文件Src:源代码Android:Src:源代码Res\drawable:图片Res\raw:声音Res\values:字符串Assets:数据文件三、安装包比较J2me: Jad,jarAndroid: a...

weixin_29323365的博客 609

J2ME猜数字游戏源码解析与实战开发

猜数字游戏是一种简单而经典的互动游戏,其核心机制如下:系统生成一个1~100之间的随机整数;玩家通过输入猜测数字;系统反馈“猜大了”、“猜小了”或“猜对了”;玩家在限定次数内完成目标,否则游戏失败。该机制虽然简单,但涵盖了输入处理、数据比较、状态判断、反馈输出等基础逻辑,是学习移动游戏开发的理想案例。在游戏开发中,状态管理是控制游戏流程的关键。猜数字游戏可以定义以下几种状态:状态名称描述MENU主菜单状态PLAYING游戏进行中。

weixin_30415591的博客 846

使用J2ME技术开发RPG游戏(一)——程序框架

使用J2ME技术开发RPG游戏(一)——程序框架作者:陈跃峰出自:http://blog.youkuaiyun.com/mailbomb       RPG(角色扮演游戏)是手机游戏中的一类主要类型,也是相对来说比较麻烦的一类游戏,下面通过一系列的文章来介绍如何使用J2ME技术来开发RPG游戏。       首 先让我们来看一下游戏的骨架——程序框架的实现。程序框架主要包含三个方面:绘制结构、

十分钟年华老去 848

J2ME的RMS增删改查的简单事例

初学J2ME时做的一个关于电话薄例子,包含了增删改查四项功能

J2ME中RMS存储工具使用解析

J2ME中RMS存储工具使用解析,希望对大家有用!

j2me on android,J2ME和Android的几个基本区别

首先从程序上来说的话,基本是没有多少区别的.都是使用JAVA语言开发,使用的框架和类不同而已.一、平台的区别J2me: 开发平台Android: 操作系统二、工程结构比较J2me:Res:资源文件Src:源代码Android:Src:源代码Res\drawable:图片Res\raw:声音Res\values:字符串Assets:数据文件三、安装包比较J2me: Jad,jarAndroid: a...

weixin_31742467的博客 209

J2me存储和连接详解

J2me RMS存储 网络连接 详解 PDF文档 自制目录

J2ME游戏俄罗斯方块的设计与改良

文章来源:J2ME开发网前些时日希望找一份俄罗斯方块的游戏学习一下, 发现网上大部分链接都是陈万飞 兄的大作, 你可以在http://blog.youkuaiyun.com/legendinfo/archive/2004/11/29/197720.aspx  访问获取具体信息.  唯一遗憾的是程序写成的时候已经较长, 而作为一个开源项目的延展, 似乎并没有后续版本的跟上. 学习之余, 本人也做了一定的修改,

mobilechannel的专栏 1315

J2ME日记本或记事本

基于J2ME实现的日记本(记事本)RecordStore用来存储日记,和手机记事本功能高度一致,代码完整实现

j2me里面各种漂亮进度条的制作方法

j2me里面各种漂亮进度条的制作方法,例子和简洁哦~~

J2ME潜艇大战游戏设计与实现

摘要    本文给出了一个飞机射击类(潜艇)游戏的设计过程以及相应的流程图,并提供了Demo版源代码下载地址,游戏在sun wtk v2.2 下调试通过。声明:本游戏所用的资源大多不属于作者,代码仅供非商业用途的学习参考。以下为游戏的几张截图740)this.width=740" border="undefined"/>游戏设计1 游戏操作流程:    游戏的初始画面是一个implusive的Li

Herr Apfel的专栏 1781

J2ME编写的一个手机存储功能.rar

J2ME编写的一个手机存储功能.rar J2ME编写的一个手机存储功能.rar J2ME编写的一个手机存储功能.rar

上一篇: 最简单的游戏回血逻辑实现(包括源代码)
下一篇: MIDP2.0手机上的手电筒程序(附代码)
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值