`
java2000.net
  • 浏览: 650842 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多

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

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

 

       在手机程序运行过程中,因为手机来电等事件,需要暂停手机程序的执行,下面就简单的介绍一下该功能的程序实现。

       实现该功能需要了解MIDlet的生命周期,在手机来电时,系统会自动调用MIDlet子类中的pauseApp方法,在电话结束时会自动调用startApp重新启动程序,所以我们只需要将处理的代码放在这两个方法内部就可以。

       Nokia在实现时没有严格按照MIDlet的生命周期来实现,所以Nokia系列的手机在实现暂停功能的时候,需要在Canva类中覆盖hideNotifyshowNotify方法,其中hideNotify会自动在Canvas不可见的时候被系统调用,showNotify会自动在Canvas可见时被系统调用。

       实现暂停功能的原理就是在手机来电的时候停止线程,在电话结束的时候继续开始线程。

       下面是一个实现的代码,该代码主界面中实现的是一个不断变大的数字,可以使用在手机来电的时候会自动暂停。该代码在Nokia 6020手机上测试通过。程序中包含三个源文件:PauseMIDletMIDlet类文件,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();

    }

  }

 

}

分享到:
评论
1 楼 LinuxFans 2009-05-15  
这种只能是针对,没有联网的手机客服端软件才能这样子做,要是手机本身是联网,如在线听歌,就不行了。因为来电和联网都是走手机的io接口。

相关推荐

    使用j2me编程的游戏——俄罗斯方块

    源代码会包含各种类,如GameLoop(游戏循环)、GameBoard(游戏板)、Block(方块)、InputHandler(输入处理器)等,每个类都有其特定的责任,共同协作以实现游戏的功能。 在学习和分析提供的"俄罗斯方块源程序"时...

    J2ME手机软件开发之我的设计源代码1

    在本文中,我们将深入探讨J2ME(Java 2 Micro Edition)手机软件开发,并通过提供的三个源代码示例——备忘录应用、设计文档以及音乐播放器,来解析和理解J2ME编程的关键概念和实践。 J2ME是Java平台的一个版本,专...

    J2ME手机游戏推箱子源代码

    本文将深入探讨一个基于J2ME的手机游戏——“推箱子”的源代码,旨在帮助开发者了解如何利用J2ME进行游戏开发,学习其中的编程技巧和逻辑处理。 1. **J2ME基础** J2ME由MIDP(Mobile Information Device Profile)...

    j2me动作类手机游戏源代码(本人原创)

    在源代码中,我们可以看到如何使用J2ME的图形库来绘制游戏场景,创建动态的角色和物体,以及实现基本的物理运动模拟。 1. 角色控制:玩家通过键盘或触摸屏控制主角移动,源码中会包含对按键事件的监听和响应机制。...

    基于j2me的手机游戏源代码

    【标题】"基于j2me的手机游戏源代码"涵盖了移动设备上开发游戏的重要技术——Java 2 Micro Edition (J2ME)。J2ME是一个Java平台,专门用于嵌入式系统,包括早期的智能手机和平板电脑。它由Java ME应用框架、可下载的...

    j2me游戏俄罗斯方块原代码

    在这个压缩包中,包含的是一个基于J2ME实现的经典游戏——俄罗斯方块的源代码。 俄罗斯方块是一款全球闻名的益智游戏,其基本原理是不同形状的方块从屏幕顶部落下,玩家需要通过旋转和横向移动来排列它们,使得同一...

    J2ME 完整版魂斗罗代码

    通过研究这些源代码,我们可以了解如何在限制资源的环境中实现复杂的交互逻辑,优化性能,以及构建具有吸引力的2D游戏体验。对于想要深入理解J2ME游戏开发的程序员来说,这是一个不可多得的学习资源。

    J2ME手机游戏设计案例源代码-GameEngine_Record

    ### J2ME手机游戏设计案例源代码-GameEngine_Record #### 概述 J2ME(Java 2 Micro Edition)是Sun Microsystems推出的一种基于Java的技术标准,主要用于移动设备上的应用程序开发,例如智能手机、PDA等。本文将...

    JAVA基于J2ME的手机游戏开发(论文+源代码).zip

    7. **源代码分析**:提供的源代码可能包含一个简单的游戏示例——“贪食蛇”。这是一个经典的移动游戏,用于教授基本的游戏编程概念,如移动对象、碰撞检测和游戏循环。 源代码分析可能涉及以下几个方面: - 游戏...

    开源程序J2ME下的空档接龙

    开源程序J2ME下的空档接龙是一款基于Java 2 Micro Edition (J2ME) 平台开发的经典桌面游戏——空档接龙的实现。J2ME是Java平台的一个子集,专门用于嵌入式设备和移动设备,如手机、智能手表等。它提供了丰富的功能,...

    J2me手机游戏飞机射击完整源码.7z

    本压缩包包含的是一款基于J2ME技术的手机游戏——飞机射击的完整源代码。通过研究这款源代码,开发者可以深入理解J2ME游戏开发的基本原理和技巧。 1. **J2ME架构**:J2ME由配置(Configurations)和 profiles...

    基于的j2me坦克大战

    本文将深入探讨一款基于J2ME开发的经典游戏——坦克大战,分析其技术实现、设计理念以及对现代移动游戏开发的启示。 一、J2ME概述 J2ME是Java平台的一个子集,专为资源有限的嵌入式设备如移动电话和PDA设计。它...

    软件工程J2ME教学幻灯片

    在本篇讲解中,我们将深入理解J2ME(Java 2 Micro Edition)中的核心概念——MIDlets,以及如何开发和管理这些针对移动设备的应用程序。J2ME是一种Java平台,用于开发和部署在资源有限的设备上运行的软件,如手机、...

    J2ME贪吃蛇源码

    【J2ME贪吃蛇源码】是一款基于Java 2 Micro Edition(J2ME)平台开发的经典游戏——贪吃蛇的源代码实现。J2ME是Java为移动设备和嵌入式设备提供的一种轻量级的开发框架,常用于早期的手机游戏和应用开发。 在这款...

    J2ME手机俄罗斯方块游戏

    在这个特定的项目中,我们看到一个使用J2ME技术在手机上实现的经典游戏——俄罗斯方块。J2ME以其轻量级和跨平台的能力,成为了开发移动游戏的常见选择。 **J2ME框架** J2ME由几个关键组件构成,包括KVM(K Virtual...

    j2me俄罗斯方块-手机版

    总结来说,这个J2ME版的俄罗斯方块项目展示了如何利用Java技术在移动设备上开发游戏,涉及到图形绘制、用户交互、游戏逻辑等多个方面,对于想要学习J2ME或移动游戏开发的初学者来说,尽管没有源代码,但通过分析和...

    基于J2ME的贪吃蛇手机游戏开发

    在J2ME环境中,开发者通常需要安装Java Development Kit (JDK)来编译Java源代码,然后使用通用J2ME Software Development Kit (SDK)和J2ME IDE(如NetBeans或Eclipse)进行开发和调试。J2ME的虚拟机(KVM,K Java ...

    J2ME开发的中文教程

    3. **编译与打包**:使用WTK的命令行工具或集成开发环境将源代码编译成.class文件,并打包成.jar和.jad文件。 4. **测试与调试**:在WTK模拟器或实际设备上运行MIDlet,进行功能测试和性能优化。 5. **发布与部署*...

    基于J2ME的Java手机软件开发

    开发基于J2ME的应用程序首先需要明确其真实运行环境——即支持J2ME的4G手机。软件开发流程一般包括在桌面计算机上的模拟阶段,随后再将经过验证的程序移植到目标设备上。为此,开发者需要搭建合适的开发环境: - **...

    J2ME Tutorial, Part 1 Creating MIDlets

    完成编码后,使用Java编译器(如javac)将源代码编译成字节码文件(.class文件)。确保所有依赖的类都已正确导入。 ##### 步骤4:预验证 预验证是J2ME应用发布前的一个重要步骤,用于确保应用符合CLDC(Connected ...

Global site tag (gtag.js) - Google Analytics