`
dreamkid0924
  • 浏览: 12779 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
最近访客 更多访客>>
社区版块
存档分类
最新评论

深入了解J2ME生命周期[转载]

阅读更多


  学习J2ME,首先要了解MIDlet的生命周期。本文主要是深入了解一下MIDlet的生命周期。
  
  首先在你运行一个程序的时候,JAM会调用该midlet的构造函数来生成midlet的对象,然后被JAM置于Paused状态。一旦JAM认为这个midlet对象可以执行时,就会调用startApp()方法,并将此midlet置于Active状态。startApp()方法由于在系统来电、或者退回到系统菜单返回时会被再次调用,所以这里只可以放初始化一次的代码。或者你把初始化一次的代码放到midlet的构造函数中。例如:
  
  public class Midlet extends MIDlet{
  
  Display display = null;
  
  MyCanvas can;
  
  public Midelt(){
  
  display = Display.getDisplay(this);
  
  can = new MyCanvas();
  
  }
  
  public void startApp(){
  
  display.setCurrent(can);//如果把can = new
  MyCanvas()放到这里,再来电返回时就会出问题。
  
  }
  
  }
  
  或者
  
  public class Midlet extends MIDlet{
  
  Display display = null;
  
  MyCanvas can;
  
  public Midelt(){
  
  }
  
  public void startApp(){
  
  if(display ==null){
  
  display = Display.getDisplay(this);
  
  can = new MyCanvas();
  
  }//此处只会被运行1次,这样就不会出错
  
  display.setCurrent(can);//这句按理放到这里最合适,你想显示那个canvas就放哪个!
  
  }
  
  }
  
  在startApp()中,你调用display.setCurrent(can)的时候,首先运行的是showNotify(),接着运行paint()函数一次,如果有线程的话,此时run()方法开始运行。一般在run()方法里一般这么写。此时的run()是可以处理异步事件的,也就是你来电话的时候,这里run()还是运行的。不过他不会paint()什么东西,即使它里面有repaint(),这点放心。
  
  public void run(){
  
  while(flag){//flag是boolean型变量
  
  try{
  
  Thread.sleep(50);//时间自己设啦。
  
  }catch(Exception e){}
  
  repaint();
  
  }
  
  }
  
  哇,来电话了,或者你退到系统菜单。如NOKIA s60的手机。
  
  hideNotify()首先会被调用,接着pauseApp()再被调用。
  
  这么快,打完了,返回时:先调用showNotify(),接着调用paint()函数一次,最后才是调用startApp()函数。
  
  关于run()和paint()也可以使用display.callSerially(this)语句。这个以后有时间了再说。
  
  明白了生命周期,再来看死机问题。我说的死机问题,多是来电话返回时死机。其实只要找到了问题,一切就变的很简单。
  
  为什么死机,归根结底还是程序问题。
  
  Graphics mg;//定义的全局参数
  
  paint(Graphics g){
  
  mg = g;//有的程序这样写,if(mg ==null){mg =g:}这样对于n7610系列就会出错。
  
  mg.drawString();
  
  switch(case){
  
  case GAME_MUNE:
  
  drawA();
  
  break;
  
  case PLAY:
  
  drawB();
  
  break;
  
  default:
  
  break;
  
  }
  
  }
  
  /*下面的画图函数一定要放到paint()函数里调用,不要在别的地方调用,如run()里面,上面说过,程序暂停之后返回,会先paint()一次,如果在别的地方调用就会出现问题。
  
  */
  
  public void drawA(){
  
  mg.drawString();
  
  }
  
  public void drawB(){
  
  mg.drawString();
  
  }
  
  按照上面的写法一般不会出现死机问题。当然,你也可以不定义全局的mg,可以把g单独传到各个画图子函数中。如,
  
  paint(Graphics g){
  
  g.drawString();
  
  switch(case){
  
  case GAME_MUNE:
  
  drawA(g);
  
  break;
  
  case PLAY:
  
  drawB(g);
  
  break;
  
  default:
  
  break;
  
  }
  
  }
  
  public void drawA(Graphics mg){
  
  mg.drawString();
  
  }
  
  public void drawB(Graphics mg){
  
  mg.drawString();
  
  }

文章转载自网管之家:http://www.bitscn.com/pdb/java/200605/20793.html
分享到:
评论

相关推荐

    j2me经典游戏源码

    通过研究这个"j2me经典游戏源码",你可以深入了解J2ME的编程模型,掌握在有限资源设备上构建可扩展和交互性强的应用程序的方法。无论是初学者还是有经验的开发者,都能从中受益匪浅,提升自己的技能。

    J2ME学习资料打包下载

    3. **MIDlet生命周期**:MIDlets是J2ME应用程序的基本单元,它们有自己的启动、暂停、恢复和停止的生命周期。理解这一生命周期对编写响应良好的应用程序至关重要。 4. **网络编程**:J2ME支持通过HTTP、WAP等方式...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 首先,我们要了解J2ME的基础架构。J2ME包括配置(Configurations)、配置文件(Profiles)和功能包...

    j2me游戏.rar

    一个MIDlet包含主类,该类扩展了MIDlet类,并实现了必需的生命周期方法。 五、游戏编程概念 1. **游戏循环**:游戏的核心是游戏循环,它负责更新游戏状态、处理用户输入和渲染画面。 2. **碰撞检测**:在游戏中,...

    郭克华J2ME移动开发源码及幻灯片

    2. **基础概念**:涵盖J2ME的生命周期管理、用户界面构建(如WTK(Wireless Toolkit)中的MIDlet类)、数据存储(如Record Store)、网络通信(如Connector类)等基础知识。 3. **图形用户界面**:介绍如何使用...

    J2ME的TextBox用法

    在探讨J2ME中的`TextBox`用法时,我们不仅限于其基本功能,还将深入理解如何结合`Command`命令来实现用户交互,以及如何优雅地处理应用的生命周期事件。以下将详细介绍`TextBox`和`Command`在Java Micro Edition...

    J2ME游戏开发实例讲解

    MIDlet是J2ME应用程序的基本单元,我们需要继承自MIDlet类,并实现其生命周期方法。此外,我们还需要利用Sprite类等游戏相关API来处理图形和动画效果。 测试阶段不可忽视,良好的测试可以确保游戏的稳定性和用户...

    j2me编程教学

    你会学习到基本的J2ME编程元素,如 MIDlet,它是J2ME应用程序的核心,负责管理应用程序的生命周期。此外,还会涉及到Displayable类,它是所有可视组件的基类,以及Form和Alert等用户界面组件。 在"第二章"中,你将...

    J2ME开发 J2ME开发 J2ME开发

    J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能电表、家庭自动化设备等。它提供了跨平台的开发环境,使得开发者可以编写一次代码,到处运行。J2ME由两大...

    j2me雷电游戏 改写版

    8. **MIDlet生命周期**:MIDlet是J2ME应用的主体,了解其startApp(), pauseApp(), resumeApp()和destroyApp()等方法的调用顺序和应用场景。 9. **网络功能**:如果游戏包含在线元素,如排行榜或者数据同步,那么...

    j2ME手机移动开发

    开发者需要了解如何创建MIDlets,定义它们的生命周期方法,如startApp()、pauseApp()和destroyApp()。此外,还要掌握如何使用MIDP提供的用户界面组件来创建UI,如ChoiceGroup、TextBox和Form。 ### 6. 网络通信 ...

    j2me开发教程全集

    3. **MIDlet**:MIDP中的应用程序单位称为MIDlet,它们是Java类集合,遵循特定的生命周期,包括startApp、pauseApp、resumeApp和destroyApp方法。 4. **用户界面(UI)组件**:J2ME提供了一些基础的UI组件,如...

    J2ME中文版教程 J2ME教程

    这个J2ME中文版教程是针对初学者和有一定经验的开发者编写的,旨在深入浅出地讲解J2ME的基础知识和高级特性,帮助读者掌握在移动平台上开发应用程序的技能。 **教程内容概览** 1. **J2ME概述**:教程首先介绍了...

    j2me的一个示例项目

    通过这个"j2me的一个示例项目",你可以深入了解J2ME开发流程,学习如何在Eclipse环境中管理和运行J2ME应用,并掌握相关的编程和优化技巧。这将为你进一步探索移动和嵌入式领域的Java开发奠定坚实基础。

    j2me源代码.rar

    这份压缩包为学习者提供了深入理解J2ME游戏开发的实践机会。 首先,"J2ME手机游戏编程入门源代码_"是一个理想的起点,它提供了基础的游戏编程概念和逻辑,帮助初学者了解如何在J2ME平台上构建简单的游戏。这部分...

    j2me 经典版

    MIDlet有生命周期方法,如startApp()、pauseApp()和destroyApp(),用于管理应用程序的状态。 5. **用户界面**:J2ME的用户界面通常基于 Lightweight User Interface Toolkit (LWUIT),提供了一组轻量级组件,如...

    J2ME游戏的基本结构

    下面我们将深入探讨 J2ME 游戏的基本结构。 一、J2ME 开发环境 J2ME 游戏开发通常需要一个集成开发环境(IDE),如 NetBeans 或 Eclipse,以及相应的 J2ME 插件。这些工具提供代码编辑、编译、模拟器测试等功能,...

    j2me各种游戏代码

    标题“j2me各种游戏代码”表明这是一个包含多种J2ME游戏源代码的集合,这对于想要学习或深入了解J2ME游戏开发的初学者来说非常有价值。通过分析和实践这些代码,开发者可以理解J2ME游戏的基本结构、图形绘制、用户...

    J2ME游戏开发(第一版)

    2. **MIDlet生命周期**:MIDlet是J2ME中的应用程序单元,它们遵循特定的生命周期,包括启动、暂停、恢复和停止等状态。理解这些状态对于编写可管理的游戏至关重要。 3. **用户界面设计**:J2ME提供了基础的图形用户...

Global site tag (gtag.js) - Google Analytics