`

一个midlet有几个线程【转载】

 
阅读更多
上面的方法中应用了多态!
======================================================
JAMS应该还有一个机制来监听midlet的状态的转变,当你调用

destroyApp(false);noticeDestroyed();时,这个机制就将当前状态转变为销毁态,当你调用

pauseApp();noticePause();时,这个机制就将当前状态转变为暂停态。notice方法正是这个机制和midlet的通信接口!
======================================================
所以说,midlet不是一个严格意义上完整的程序,它的很大一部分都由JAMS来做了。
======================================================
我再对我发的楼顶帖作以修改:
标题:敲开MIDlet的脑壳----在MIDlet中另外运行的两个线程
先定义几个名词:
1.MyMIDlet是继承了MIDlet的类(至于MyMIDlet是否实现其它接口,我们不去关心)
2.MyCanvas是继承了Canvas的类(MyCanvas是否实现其它接口,我们也不去关心)
3.“进入”表示跟进debug的路线
第一个“另外”:
        经过debug,我发现,在主线程中,一个midlet中最先被执行的代码是MyMIDlet类的对象的构造函数,而后进入了java.lang.Class类(public   final)的runCustomCode()方法(static),而后再进入com.sun.midp.midlet.MIDletState类(public   abstract)中未知方法(调试看不出来,如有人知道请告知),而后再进入com.sun.midp.midlet.Selector类(extends   MIDlet   implements   CommandListener,   Runnable)中,启动了run()方法,第一个“另外”诞生了。

第二个“另外”:
        接着上面继续debug:
        下来才是调用MyMIDlet类实例的startApp方法,执行
Display.getDisplay(this).setCurrent(Displayable),由于setCurrent的参数是MyCanvas类的实例,所以,这一执行(指Display.getDisplay(this).setCurrent(Displayable))即调用(进入)了MyCanvas的paint()方法,所以,Display的成员方法setCurrent应该类似于下面的代码:
public   void   setCurrent(Displayable   d){
    ...   ...
    Graphics   g   =   d.getGraphics();//生成Graphics实例
    d.paint(g);
    ...   ...
}

在执行完paint方法之后,进入了Canvas类中的其它未知方法,而后再进入Display的未知方法,而后进入几个无关类之后就断掉了,原因无从查找,不过我们可以这样得到第二个另外:
在模拟器单击开始,你会发现又能debug了,这时,当你执行完commandAction方法后,再debug几次,你就进入了这么一个类:com.sun.midp.lcdui.DefaultEventHandler(public   &   implements   EventHandler),而后进入com.sun.midp.lcdui.AutomatedEventHandler(public   &   extends   DefaultEventHandler   implements   AutomationHandler)类,这两个类成继承关系,而在DefaultEventHandler类中又有一个内部类VMEventHandler(implements   Runnable)实现了run()方法,所以,第二个“另外”产生了:)

关于第一个“另外”:我认为这个线程是监听midlet状态的监听线程,叫状态监听线程

关于第二个“另外”:我认为是监听键盘输入的监听线程,叫键盘监听线程

所以,在一个midlet中,一般有下面这四个线程:

1.主线程

2.状态监听线程

3.键盘监听线程

4.自己实现的画动画的线程。

关于自己程序中画动画的线程(该线程中实现了对动画的repaint):
该线程在上述步骤中已经启动,启动的地方通常有两个,一处是在MIDlet对象的构造过程中(如果有和该对象成聚合关系的其它对象,则也在这里初始化);另外一处则在startApp()方法中,在实现了Display.getDisplay(this).setCurrent(Displayable);语句之后。
=======================================================================
在上面的debug过程中,我使用的是sun自己的wtk2.1,别的api的debug过程可能不一样,但是这是大同小异的,你可以触类旁通。
比如西门子的api中监听键盘线程在javax.microedition.lcdui.EventQueue(final   &   implements   Runnable)中实现.

分享到:
评论

相关推荐

    MIDLet-Servlet通信

    在Java移动领域,MIDLet(Mobile Information Device Profile Application)是J2ME(Java 2 Micro Edition)平台上的一个应用程序接口,主要用于开发在小型设备如手机或掌上电脑上的应用程序。MIDLet与Servlet的通信...

    MIDlet控件实例项目(mvc)

    该项目是一个基于Eclipse的MIDlet应用程序示例,其核心目标是演示如何在Java 2 Micro Edition (J2ME) 平台上使用MIDlet控件。MIDlet是J2ME中的一个关键概念,它是一个可下载的移动应用单元,能够在小型设备如手机或...

    Midlet Signing

    假设我们正在为一款MOTO手机开发一个简单的Midlet应用。下面简要介绍如何利用`jarsigner`工具完成签名过程: - **步骤一**: 生成证书文件。 ```bash keytool -genkey -v -keystore my-release-key.keystore -...

    Midlet2.rar_midlet_simple

    【标题】"Midlet2.rar_midlet_simple" 涉及的是Java 2 Micro Edition (J2ME) 平台中的MIDlet应用开发,利用Lightweight User Interface Toolkit (LWUIT) 库来创建一个简单的用户界面。MIDlet是J2ME中的一个核心概念...

    midlet_servlet.rar_midlet-servlet

    标题中的"midlet_servlet.rar_midlet-servlet"暗示了这是一个关于Java ME(Midlet)与Servlet交互的项目。在移动设备(如早期的智能手机)上,Java ME(Micro Edition)提供了一个名为Midlet的框架,用于开发移动...

    Java语言多线程技术应用研究

    Java语言的多线程技术是其核心特性之一,允许在一个程序中同时运行多个相对独立的线程,以提高程序的并发性和效率。线程被定义为程序内部的单个顺序控制流,它专注于完成特定的功能。多线程的运用使得程序能够更有效...

    J2ME开发资料整理-在MIDlet中使用图标(附范例)

    在上述代码中,我们首先创建了一个Form,然后从资源加载了图标("/icon.png"),并将其设置为Form的ticker图标。此外,还可以使用 `setCommandIcon` 方法为Command设置图标,或者使用 `ImageItem` 显示单独的图片。 ...

    读取MIDlet的系统属性

    首先,让我们看一个简单的示例代码,该代码创建了一个名为`DetectMIDlet`的MIDlet,它展示了一些关键的系统属性: ```java import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class...

    MIDlet-Test.zip_midi_midlet

    如果"248147"代表一个文件,那它可能是某种编码的文件名,或者是一个意外的数据,需要进一步的信息才能确定其实际含义。 总的来说,这个压缩包"**MIDlet-Test.zip_midi_midlet**"是针对Java ME平台,特别是MIDlet和...

    MIDlet通过蓝牙与电脑通信的案例

    encrypt=false")`会打开一个与指定地址和UUID(通用唯一标识符)的蓝牙串行端口协议(BTSSPP)连接。 3. **数据交换**: 连接建立后,我们可以使用`InputStream`和`OutputStream`进行数据传输。MIDlet通过`...

    RMS-MidLet例子

    每条记录都有一个唯一的标识符和关联的数据。 创建RecordStore时,你需要指定一个唯一的名称,如果该名称的RecordStore已存在,则会打开它,否则会创建一个新的。然后,你可以使用RecordStore的addRecord()方法添加...

    midlet2.zip_png

    标题“midlet2.zip_png”暗示这可能是一个与Java MIDP(Mobile Information Device Profile)相关的压缩文件,MIDP是Java Micro Edition(Java ME)的一部分,用于开发移动设备上的应用程序,尤其是早期的智能手机和...

    黑莓MIDlet开发指南

    1. **项目创建**:在集成开发环境中新建一个MIDlet项目。 2. **UI设计**:根据需求设计用户界面,可以使用AWT/SWT组件库或自定义组件。 3. **功能实现**:编写业务逻辑代码,实现所需的功能模块。 4. **调试与测试**...

    JAVA游戏编程之二----j2me MIDlet 手机游戏入门开发--扫雷(3)-带线程--仿windows扫雷

    增加绘图,线程,时间等,使得游戏更好玩了,代码400行,比较适合初学者,可读性强,有详尽的代码注释。 数字键1标红旗,不确定,取消标记。方向键,数字键2468,控制光标上下左右移动!

    新建第一个J2me程序----低级UI绘制的Hello MIDlet

    在本文中,我们将深入探讨如何使用Java 2 Micro Edition(J2ME)创建你的第一个低级用户界面(UI)绘制的“Hello MIDlet”程序。MIDlet是J2ME平台上的应用程序,它允许在移动设备和嵌入式系统上运行。我们将遵循一个...

    如何将MIDlet应用移植到BlackBerry

    `-MIDlet`表示这是一个MIDlet应用;`-jad`指定了JAD文件的位置;最后的参数则指定了需要编译的JAR文件。 #### 在BlackBerry开发环境中导入MIDlet项目 除了使用rapc之外,还可以直接在BlackBerry开发环境中导入...

    线程过多and高效MIDP编程

    《线程过多与高效MIDP编程》是针对移动设备应用程序开发的一个重要主题,特别是针对Java Micro Edition (MIDP)平台。MIDP是Java技术在资源受限的移动设备上运行的一种轻量级实现,它允许开发者创建跨平台的移动应用...

    BlackBerry 应用和MIDlet之间的交互

    每个MIDlet套件都可以利用RMS创建一个或多个记录存储,每一个记录存储都具有唯一的名称标识。 - **操作**:在`javax.microedition.rms`包中,提供了创建、打开、关闭、读取、写入、更新记录存储等基本操作,同时也...

Global site tag (gtag.js) - Google Analytics