深入分析J2ME平台MIDP低级事件处理机制

深入解析J2ME超级玛丽游戏源代码 J2ME(Java 2 Platform, Micro Edition)是为嵌入式设备设计的一个Java平台,由Sun Microsystems公司于1999年推出。它源自早期的Java平台,专为有限资源的消费电子设备,如手机、PDA等,进行了特别的优化。J2ME的推出,让开发者能够用熟悉的Java语言为不同的移动设备创建应用程序和游戏。超级玛丽(Super Mario)是任天堂公司推出的一款经典的平台跳跃游戏,首次发行于1985年。 阅读详情

      在前面的文章中我们讲述了如何实现CommandListener和ItemStateListener接口来完成高级事件处理。但是来自于键盘输入的低级事件是不能由Command来完成的。你必须继承Canvas类并覆盖其中的方法来完成低级事件的处理。

      通常低级事件的处理是为了满足游戏开发的需要,因为游戏开发相关的问题非常复杂。因此不在这里进行阐述,有兴趣的朋友可以和我索要相关的游戏开发资料。MIDP定义了如下键值在Canvas类内

  • KEY_NUM0
  • KEY_NUM1
  • KEY_NUM2
  • KEY_NUM3
  • KEY_NUM4
  • KEY_NUM5
  • KEY_NUM6
  • KEY_NUM7
  • KEY_NUM8
  • KEY_NUM9
  • KEY_STAR
  • KEY_POUND
  • 这些都是按键基本值,当然有些手机是触摸屏的。事件的传递是通过如下方法来实现的。

  • protected void keyPressed(int keyCode)
  • protected void keyReleased(int keyCode)
  • protected void keyRepeated(int keyCode)
  • protected void pointerPressed(int x, int y)
  • protected void pointerDragged(int x, int y)
  • protected void pointerReleased(int x, int y)
  • protected void showNotify()
  • protected void hideNotify()
  • protected abstract void paint(Graphics g)
  • commandAction() method of the CommandListener interface
  • 开发者应该继承Canvas类的同时覆盖相应的方法来实现低级事件的处理,低级事件的处理是连续的、串行的,在前面的事件返回之前后面的事件不会执行,当然也有例外,你可以参考API doc得到答案。下面是一个例子,它的功能就是在屏幕上显示出你按下键的键值,界面非常简单因此没有抓图。代码如下所示:
    //LowLevelMIDlet.java

    import javax.microedition.lcdui.Display;
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.midlet.MIDletStateChangeException;

    /*
     * Created on 2004-6-24
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */

    /**
     * @author P2800
     *
     * TODO To change the template for this generated type comment go to Window -
     * Preferences - Java - Code Style - Code Templates
     */
    public class LowLevelMIDlet extends MIDlet
    {

        private Display display;
        private KeyCanvas keyCanvas;

        /*
         * (non-Javadoc)
         *
         * @see javax.microedition.midlet.MIDlet#startApp()
         */
        protected void startApp() throws MIDletStateChangeException
        {
            // TODO Auto-generated method stub
            display = Display.getDisplay(this);
            keyCanvas = new KeyCanvas();
            display.setCurrent(keyCanvas);

        }

        /*
         * (non-Javadoc)
         *
         * @see javax.microedition.midlet.MIDlet#pauseApp()
         */
        protected void pauseApp()
        {
            // TODO Auto-generated method stub

        }

        /*
         * (non-Javadoc)
         *
         * @see javax.microedition.midlet.MIDlet#destroyApp(boolean)
         */
        protected void destroyApp(boolean arg0) throws MIDletStateChangeException
        {
            // TODO Auto-generated method stub

        }

    }

    //KeyCanvas.java

    import javax.microedition.lcdui.Canvas;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.Graphics;

    /*
     * Created on 2004-6-25
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */

    /**
     * @author P2800
     *
     * TODO To change the template for this generated type comment go to Window -
     * Preferences - Java - Code Style - Code Templates
     */
    public class KeyCanvas extends Canvas implements CommandListener
    {
        private String key = "Press any key";

        /*
         * (non-Javadoc)
         *
         * @see javax.microedition.lcdui.Canvas#paint(javax.microedition.lcdui.Graphics)
         */
        protected void paint(Graphics g)
        {
            // TODO Auto-generated method stub
            g.setColor(255, 255, 255);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(0, 0, 0);
            g.drawString(key, getWidth() / 2, getHeight() / 2, Graphics.TOP
                    | Graphics.HCENTER);

        }

        public void keyPressed(int keyCode)
        {
            key = keyCode + " is pressed";
            repaint();
        }

        public void keyReleased(int keyCode)
        {
            key = keyCode + " is released";
            repaint();
        }

        /*
         * (non-Javadoc)
         *
         * @see javax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command,
         *      javax.microedition.lcdui.Displayable)
         */
        public void commandAction(Command arg0, Displayable arg1)
        {
            // TODO Auto-generated method stub

        }

    }

深入理解Java 2平台安全架构与未来方向 本文深入探讨了Java 2平台的安全架构,包括安全策略配置、密钥和证书创建,以及对JAR文件进行签名等技术细节。同时,文章也介绍了Java Card技术和J2ME的引入,以及J2SE未来可能的安全增强措施。 阅读详情

相关推荐

Java游戏开发实例:Dragon项目解析与源码分享

本文还有配套的精品资源,点击获取 简介:本文深入分析了名为"Dragon"的Java游戏项目,这是一个基于J2ME开发的手机射击游戏。通过学习这个项目,初学者可以掌握Java在游戏开发中的应用,理解游戏循环、图形与动画、碰撞检测、声音处理、用户输入、对象与状态管理、数据持久化及性能优化等关键点。通过源码的解析,学习者能够将理论知识应用于实际开发,提升编程技能。 1...

weixin_35972981的博客 1104

(按键)深入分析J2ME平台MIDP低级事件处理机制

通常低级事件的处理是为了满足游戏开发的需要,因为游戏开发相关的问题非常复杂。因此不在这里进行阐述,有兴趣的朋友可以和我索要相关的游戏开发资料。MIDP定义了如下键值在Canvas类内:   KEY_NUM0   KEY_NUM1   KEY_NUM2   KEY_NUM3   KEY_NUM4   KEY_NUM5   KEY_NUM6   KEY_NUM7   KEY_NUM8

alleniversoncomputer的专栏 488

Python+ArcGIS实战:5步搞定土壤类型预测(附随机森林模型配置技巧)

本文详细介绍了如何结合Python与ArcGIS,利用随机森林模型进行土壤类型预测。通过5个核心步骤——数据预处理、样本创建、模型构建、空间预测与精度验证,构建了一套自动化、高精度的空间预测工作流,并提供了关键的模型配置与调参技巧,助力GIS开发者高效完成土壤制图任务。

weixin_29227585的博客 396

深入分析J2ME平台MIDP高级事件处理机制

      MIDP中的事件处理机制在J2ME用户图形界面开发中具有举足轻重的地位,本文将深入分析MIDP高级事件处理机制,本文提供的程序是新手学习不错的例子。在接下来的文章我会继续讲述低级事件处理机制。       MIDP的事件处理处理机制同样是采用回调的机制,你可以参考AWT的事件处理原理。在MIDP中分高级事件处理和低级事件处理,前者主要是针对高级UI,而后者主要是这对Canvas这样的低

mingjava的专栏 2728

树莓派视觉小车实战:OpenCV驱动的智能物体追踪系统

本文详细介绍了如何从零开始构建一个基于树莓派的智能视觉小车,实现物体跟踪功能。通过OpenCV进行图像处理,结合颜色与轮廓识别算法,让小车能够实时锁定并追踪特定目标。内容涵盖硬件搭建、软件环境配置、核心代码解析及运动控制逻辑,为创客和开发者提供了完整的实战指南。

weixin_29047545的博客 144

如何搭建pikachu靶场

Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字)

2401_85351702的博客 1278

本人编写的《J2ME开发精解》已经由电子工业出版社出版

J2ME开发网站长詹建飞编写的《J2ME开发精解》一书已经陆续在各个书店和网上书店上架,本书由电子工业出版社出版,SUN中国技术社区推荐java用书。目录如下:J2ME开发精解詹建飞 编著2006年1月出版ISBN 7-121-02210-949.00元(含光盘1张)416页 内容简介本书介绍如何在支持J2ME的设备上开发MIDP应用程序,尤其针对MIDP

mingjava的专栏 5502

为什么AI时代的优秀组织,都在学习Meta的Pod结构?看完秒懂

当AI技术重塑产业格局,企业协作正面临前所未有的挑战——层级繁琐、跨部门内耗、迭代滞后,传统组织模式早已难以跟上技术革新的步伐。作为全球AI原生企业的标杆,Meta独创的Pod组织模式,用“小而美”的自治单元打破困局,成为AI时代高效协作的典范。本文将从定义、运作、价值到未来演进,全面拆解Pod模式,为企业组织变革提供可参考的思路与路径。德鲁克曾说:“组织的功能就是让平凡的人做平凡的事。”而Meta Pod打破这一局限,通过去中心化、指标导向、跨界融合,让优秀人才产生“化学反应”。

Kiss_AIHR的博客 1182

分析MIDP的高级事件处理机制

作者:mingjava  文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=21MIDP中的事件处理机制在J2ME用户图形界面开发中具有举足轻重的地位,本文将深入分析MIDP高级事件处理机制,本文提供的程序是新手学习不错的例子。在接下来的文章我会继续讲述低级事件处理机制。    MIDP的事件处理处理机制同样是采用回调的机制

mobilechannel的专栏 706

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 366

【Python】解决 ERROR: Exception:Traceback (most recent call last):(亲测有效)

1、遇到问题2、问题解决

Fanjufei的博客 1万+

J2ME浅说

[u][i][b]1.J2ME采用模块化的结构[/b][/i][/u] 底层是宿主机的操作系统,内部则分为三层, Java Virtual Machine(虚拟机层); Configuration(配置层); Profile(简表层)。J2ME有两类虛拟机:CVM(C虚拟机)和KVM(K虚拟机), CVM功能比KVM功能更为强大; Configuration层:Configuration是J2M...

ittime 206

SAP 物料的与压缩库存数据不一致

总结:发生这个问题的原因多数会发生在测试系统在拷贝正式系统的时候会发生这样的情况,系统在拷贝的时候,业务数据还在发生,就会导致数据拷贝的时候丢失数据。经过查询发现是由于物料分类账中的物料的库存数量和 ACDOCA_M_EXTRACT表中的数量对不上,导致系统抛出报错的信息。由于是测试系统,直接更改表的数据,把ACDOCA_M_EXTRACT表中的库存数据和金额与物料分类账中的数据保持一致。在测试系统中进行501和561增加库存的时候,系统提示物料的预压缩库存数据不一致的报错。

我小时候很黑的博客 3308

BREW & J2ME:在差别中联合

[出自: http://expert.imobile.com.cn]摘要 本系列面向那些习惯使用J2ME的手机开发者,或者那些对更轻便和更有效的代码生成感兴趣的BREW开发者。主要是受Java GUI模型的启发,当前的BREW_J2ME 框架可以处理J2ME中当作“高级别接口”的东西。关于如何提供确切的J2ME匹配-推理不在本文讨论范围之内,本文只是提供这两个领域的概述。 首先我将快速讨论BR

mobilechannel的专栏 5674

Qt版Dalsa线扫相机的采集Demo

Qt Dalsa

追赶时代的博客 605

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Record Management System从入门到精通系列之一

      Record Management System是J2ME的一个重要的子系统,目的是实现应用程序本地数据的持久性存储。目前支持文件系统的移动信息设备还有限,因此Record Management System是J2ME开发人员实现本地数据存储的首选途径。本文的目的就是全面的介绍Record Management System的知识。       顾名思义Record Managemen

mingjava的专栏 6563

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RMS从入门到精通之一

 Record Management System是J2ME的一个重要的子系统,目的是实现应用程序本地数据的持久性存储。目前支持文件系统的移动信息设备还有限,因此Record Management System是J2ME开发人员实现本地数据存储的首选途径。本文的目的就是全面的介绍Record Management System的知识。      顾名思义Record Management Syst

!Java 2509

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: SCJP认证考试复习笔记系列之一
下一篇: Record Management System从入门到精通系列之三
mingjava
博客等级 码龄24年 68粉丝 114原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值