学习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的编程模型,掌握在有限资源设备上构建可扩展和交互性强的应用程序的方法。无论是初学者还是有经验的开发者,都能从中受益匪浅,提升自己的技能。
3. **MIDlet生命周期**:MIDlets是J2ME应用程序的基本单元,它们有自己的启动、暂停、恢复和停止的生命周期。理解这一生命周期对编写响应良好的应用程序至关重要。 4. **网络编程**:J2ME支持通过HTTP、WAP等方式...
本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 首先,我们要了解J2ME的基础架构。J2ME包括配置(Configurations)、配置文件(Profiles)和功能包...
一个MIDlet包含主类,该类扩展了MIDlet类,并实现了必需的生命周期方法。 五、游戏编程概念 1. **游戏循环**:游戏的核心是游戏循环,它负责更新游戏状态、处理用户输入和渲染画面。 2. **碰撞检测**:在游戏中,...
2. **基础概念**:涵盖J2ME的生命周期管理、用户界面构建(如WTK(Wireless Toolkit)中的MIDlet类)、数据存储(如Record Store)、网络通信(如Connector类)等基础知识。 3. **图形用户界面**:介绍如何使用...
在探讨J2ME中的`TextBox`用法时,我们不仅限于其基本功能,还将深入理解如何结合`Command`命令来实现用户交互,以及如何优雅地处理应用的生命周期事件。以下将详细介绍`TextBox`和`Command`在Java Micro Edition...
MIDlet是J2ME应用程序的基本单元,我们需要继承自MIDlet类,并实现其生命周期方法。此外,我们还需要利用Sprite类等游戏相关API来处理图形和动画效果。 测试阶段不可忽视,良好的测试可以确保游戏的稳定性和用户...
你会学习到基本的J2ME编程元素,如 MIDlet,它是J2ME应用程序的核心,负责管理应用程序的生命周期。此外,还会涉及到Displayable类,它是所有可视组件的基类,以及Form和Alert等用户界面组件。 在"第二章"中,你将...
J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备的开发,如手机、智能电表、家庭自动化设备等。它提供了跨平台的开发环境,使得开发者可以编写一次代码,到处运行。J2ME由两大...
8. **MIDlet生命周期**:MIDlet是J2ME应用的主体,了解其startApp(), pauseApp(), resumeApp()和destroyApp()等方法的调用顺序和应用场景。 9. **网络功能**:如果游戏包含在线元素,如排行榜或者数据同步,那么...
Midlet负责程序的初始化、生命周期管理以及与设备交互。用户界面可能使用了MIDP提供的Form、ChoiceGroup等组件,或者自定义Canvas类来绘制麻将牌和游戏界面。 4. **事件处理**: J2ME中的事件处理通常是通过覆盖...
开发者需要了解如何创建MIDlets,定义它们的生命周期方法,如startApp()、pauseApp()和destroyApp()。此外,还要掌握如何使用MIDP提供的用户界面组件来创建UI,如ChoiceGroup、TextBox和Form。 ### 6. 网络通信 ...
3. **MIDlet**:MIDP中的应用程序单位称为MIDlet,它们是Java类集合,遵循特定的生命周期,包括startApp、pauseApp、resumeApp和destroyApp方法。 4. **用户界面(UI)组件**:J2ME提供了一些基础的UI组件,如...
这个J2ME中文版教程是针对初学者和有一定经验的开发者编写的,旨在深入浅出地讲解J2ME的基础知识和高级特性,帮助读者掌握在移动平台上开发应用程序的技能。 **教程内容概览** 1. **J2ME概述**:教程首先介绍了...
通过这个"j2me的一个示例项目",你可以深入了解J2ME开发流程,学习如何在Eclipse环境中管理和运行J2ME应用,并掌握相关的编程和优化技巧。这将为你进一步探索移动和嵌入式领域的Java开发奠定坚实基础。
这份压缩包为学习者提供了深入理解J2ME游戏开发的实践机会。 首先,"J2ME手机游戏编程入门源代码_"是一个理想的起点,它提供了基础的游戏编程概念和逻辑,帮助初学者了解如何在J2ME平台上构建简单的游戏。这部分...
MIDlet有生命周期方法,如startApp()、pauseApp()和destroyApp(),用于管理应用程序的状态。 5. **用户界面**:J2ME的用户界面通常基于 Lightweight User Interface Toolkit (LWUIT),提供了一组轻量级组件,如...
下面我们将深入探讨 J2ME 游戏的基本结构。 一、J2ME 开发环境 J2ME 游戏开发通常需要一个集成开发环境(IDE),如 NetBeans 或 Eclipse,以及相应的 J2ME 插件。这些工具提供代码编辑、编译、模拟器测试等功能,...
标题“j2me各种游戏代码”表明这是一个包含多种J2ME游戏源代码的集合,这对于想要学习或深入了解J2ME游戏开发的初学者来说非常有价值。通过分析和实践这些代码,开发者可以理解J2ME游戏的基本结构、图形绘制、用户...