J2ME开发入门

原文发布时间为:2008-07-31 —— 来源于本人的百度文章 [由搬家工具导入]

J2ME开发入门
J2ME方面开发的资料,确实是少之又少,一般给新手推荐的都是王森先生的《PDA与手机开发入门》一书,然而该书其实并不适合新人阅读,该书的前几章花了很大篇幅来讲解命令行调试J2ME程序的方法和很多要点,其实这些东西,作为一个初级的J2ME开发者来说,完全没有必要学习和掌握,反而只会给自己平添很多负担。现在做J2ME开发,大多都有了IDE(集成开发环境),比如JB,Eclipse什么的,就算是用最简单的WTK,也不需要进行path的配置等操作,所以初学者完全可以跳过这些内容,直接上手。我的认为,做程序开发,重在实践经验,而不是理论研究,因此,新人完全可以直接从J2ME的程序流程入手,直接进入,而不需要去了解太多基本概念,比如什么是API,什么是MIDP,什么是JDK等等。这些东西我到现在也不是很清楚,但并不影响我进行开发,我是讲究实用主义的,因此,本文的基调就在于讲述一些实用的开发方法。另外首先要声明:本文中的一切开发调试都是在WTK环境下进行的,请读者注意。
一.学习J2ME需要的基础知识
J2ME本身是Java语言的一部分,因此,对Java语言有一定了解是必要的,而Java语言本身是面向对象编程的一种语言,因此,对类与对象的概念要有必要的了解,而这些内容在本文中就不进行介绍了。另外,本文行文中对API的介绍很简略,因此,读者应该自己多查阅API中的相关内容。
二.J2ME开发环境简介
J2ME的开发环境如前文所述,目前主要有JB,Eclipse,WTK三种方式,其中前面两者都是集成开发环境,在编程上比较方便,有智能联想等功能,而WTK相对只提供了手动编译和打包,并且没有Debug功能。但WTK不需要多余的配置,对各种模拟器可以说是即插即用,而且在WTK下的程序目录简洁明了,方便查询。这几种开发环境各有长短处,所以大家可以自己选择,不过对新手来说,还是建议采用WTK,因为刚接触J2ME开发,与其把时间花在配置上,还不如花在编程上。
三.J2ME程序流程
我的感觉,每门语言都有自己的固定格式,就跟写文章的几要素一样,总有开头,结尾等等。而了解一门语言的格式,是学习这门语言最先要掌握的内容。
如果把程序流程比做是一个管道工程的话,那么每门语言里都有一个管道的入口,在J2ME里,这个入口就是MIDlet类,这个类一般也称为J2ME的主类,每个程序,都有一个或多个固定的主类,在这里,我们只谈一般的情况,即只有一个MIDlet主类的情况,大家看API即可知道,MIDlet类有几个固定方法,startApp(),pauseApp(),destroyApp(),这些方法就像是管道工程(以下的讲述里,我都把编程比作是管道工程)中的几个关键阀门,一个J2ME程序启动后,便先经历MIDlet的构造方法,然后进入startApp()方法,当有特殊情况挂起的时候,便会进入pauseApp方法,当程序结束时,便经由destroyApp方法退出。一个J2ME程序可以没有其他类,但不能没有MIDlet类,只要有一个完整的主类,便是一个完整的J2ME程序。比如非常精典的"HelloWorld",便只有一个MIDlet。
我觉得,J2ME实际上是一个很标准的顺序流程语言,J2ME中没有真正的多线程,很多情况下,一个J2ME程序的运行,我们都可以对他的流程进行完全的跟踪。这在调试方面是非常方便的。
在这里还要解释一点,J2ME程序中,屏幕对象是一个比较重要的对象,你的所有操作,你所要表达的意思,都需要在屏幕上描绘出来,因此,对屏幕的操作也是最基本和最重要的一个操作,因此,J2ME程序的操作其实就是对Display和Display上的Displayable(包括Form,TextBox,List,Canvas等等)对象进行控制。也就是说,让程序在合适的时候,把需要的Displayable显示在屏幕上。使用的方法,即是Display.setCurrent()方法。
在屏幕对象的操作上,我要解释一下,J2ME默认的屏幕只有一个,即是当前屏幕,所有操作都是对当前屏幕进行操作,因此,当你在主类中将一个Canvas对象设置为当前屏幕后,则主类已经处于脱屏状态,脱屏状态下的对象无法进行直接操作。这一点需要注意。所有外界的操作均只能作用于当前屏幕上显示的Displayable对象,无论是Form,List,或者是Canvas。此时对脱屏类的操作只能通过静态方法或者是该类的一个实例来进行。
J2ME的游戏中最简单的一种游戏流程是这样,即一个主类和一个Canvas类,主类入口处定义一个Canvas对象,并且此Canvas对象继承一个Runnable接口,再定义一个基于此对象的线程,然后将此Canvas对象设为当前屏幕对象,并启动线程,即用线程的start()方法,启动线程后,Canvas里的run方法便开始运行,而run方法通常要用repaint()方法来刷屏,因此流程就是按paint()->run->paint().....这样的过程往复,其中如果还有键盘输入,则keyPressed()等方法就穿插在中间。基本上J2ME的程序就是按这样的流程来走,因此在开发和调试中只要对这个流程进行必要的跟踪就可以了。
四.J2ME中常用的类
J2ME中常用的类有MIDlet,Form,List,Canvas,String,Command,Graphics等等。
其中Graphics作为游戏开发中的核心类,自然需要熟练的掌握。
在Graphics中如下的重要方法需要掌握:
setColor(int 设置的颜色)
setFont(Font 设置的字体)
drawRect(int 起点坐标x,int 起点坐标y,int 宽,int 高)
fillRect(int 起点坐标x,int 起点坐标y,int 宽,int 高)
drawImage(Image 要画的图形对象,int 起点坐标x,int起点坐标y,int 基点类型)
drawLine(int 起点坐标x,int起点坐标y,int 终点坐标x,int 终点坐标y)
drawString(String 要写的字符串, int 起点坐标x,int起点坐标y,int 基点类型)
在这里要说明一下什么是基点类型,基点是标志你设置的起点坐标在整个要绘制的对象(不论是图像还是文字)中的位置,如左上,右下,正中间等等。
常用的值有0或20:左上,17:正中间,24:右上,36:左下,40:右下。
除此之外,还有几个重要方法
addCommand,removeCommand,这两个方法是对Command的添加和取消的操作,很常用。
而谈到Command,自然就要涉及到commandListener这个接口,按钮的监听需要通过这个接口来进行,也就是要重载接口中的commandAction()方法。不过在使用这个接口的时候,不要忘了对当前的对象设置setCommandListener(this)。
另外,对于String类,substring方法应该掌握
而对于Form这些高级控件,可用方法不多,看看API即可。
五.J2ME中的线程
J2ME中的线程是Thread类,而实现线程有两种方法,一种是继承Runnable接口,一种是Timer和TimerTask。而不管是哪种线程,其本质都是在运行其中的run方法。在这里要注意,Runnable接口的run方法和TimerTask的run方法又是不同的,因为他们的运行机制不同。Runnable接口是*线程的休眠或等待来实现线程的刷新,而TimerTask是按照事先给定的时间间隔来自动刷新。对Runnable接口,一旦run方法结束后,则线程就结束了,因此Runnable线程里的run方法要写成循环方式,一般是while(isRunning)的形式,要结束的时候把isRunning设为false,而TimerTask则不用,因为他是定时刷新。但这样也有个问题,就是如果TimerTask的run方法写得过长,执行时间超过了设置的线程间隔时间,就会出现线程重叠的情况。线程重叠会造成诸如游戏速度突然加快等Bug。
在Runnable接口定义的线程里,有两种等待方法,一种是wait,一种是sleep,如果使用wait方法,则要注意在线程run方法里,用synchonized标志符将该线程设置为同步锁定状态,否则会出现java.lang.IllegalMonitorStateException异常,大致意思是线程当前请求的监视器对象不能响应,因为被别的线程占用了。
线程在J2ME里非常重要,一切动态效果(当然这是游戏的前提)都是通过线程来操作,因此,对线程的控制是值得研究的一个问题。如何优化代码,使线程能够在足够短的间隔时间内正常刷新,换言之,这就是大家讨论的FPS问题。程序优化做得好,则线程间隔时间可以足够短,使得FPS可以足够高,游戏的流畅度当然就越高。
六.J2ME开发中的好习惯
1.        多写注释,完备的注释不管是对你自己,还是对别人,都是很有好处的,在调试中也会起很大的帮助。
2.        在重要流程的各个环节设置一些监听点,其实很简单,就是用symstem.out.println()来输出一些标志符号就可以了,这样可以监听你的程序在运行的时候,走到哪一步。
3.        不要写太多的类,尽量整合资源,不用的变量或者方法,尽量去掉。
4.        熟练掌握各种常见的异常,不要太依赖于问别人和翻书,这些应该是一个合格的程序员应该熟练于心的东西。
5.        对不熟悉的类,应该多写小代码来实验其用法,别人讲的永远不如自己研究出来的结果牢*。

时间: 2024-08-03 19:28:09

J2ME开发入门的相关文章

史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战>就是一本写给没钱没身份没资历的创业小白看的APP书,看完这本书你可以拥有自己的一个APP,不用花钱就能移植到其他移动平台,支持iOS,Android,Windows Phone!!!!!!!!找个最便宜的来练手吧!  小白APP交流Q群:  348632872 清华大学出版社推出的<构建跨平台APP:j

[050] 微信公众平台开发入门视频教程已发布

2014年4月26日晚8点,我在CSDN社区在线培训课堂讲解了微信公众平台开发入门的相关知识,受到广大网友的一致好评,在此非常感谢大家的支持!课程结束后,很多网友表示由于报名人数限制.临时有事等原因,未能参加,希望能够提供录制视频的观看地址.视频教程的主要内容包括: 1.移动APP发展趋势(Native APP.Web APP.Light APP) 2.微信公众平台基础知识(服务号/订阅号.公众账号注册的注意事项.微信认证) 3.开发模式的使用(启用开发模式.接收与响应消息.回复文本/图文/音乐

ArcGIS API for Silverlight开发入门准备

原文:ArcGIS API for Silverlight开发入门准备 微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich Internet Application). ArcGIS API for Silverlight 能够让的Silverlight应用程序具有集成ArcGIS Server.ESRI MapIt和Bing Maps服务的能力.利用 ArcGIS Server 和Bing Maps资源,比如说Maps.Loca

JavaWeb学习总结(一)JavaWeb开发入门

静态网页和动态网页 静态网页:在服务器上没有经过服务器解释执行的网页. 动态网页:在服务器上经过服务器解释执行的网页. 无论是静态网页还是动态网页,客户端看到的网页都是由HTML所构成的,所以JavaWeb开发需要懂HTML. Servlet和Servlet容器 Servlet:是一些实现了特定接口的Java类的集合. Servlet容器是JSP/Servlet代码运行的地方,是管理JSP/Servlet的地方. 其实Servlet容器就是一个服务器软件,比如Tomcat. HTTP协议 浏览器

Android Wear 开发入门

大家好,我是陆嘉杰,我是一名Android开发者.我想和大家进行一些技术交流,希望越来越多的人能和我成为好朋友. 大家都知道,智能手表是下一个开发的风口,而这方面的技术又属于前沿,所以和大家分享下Android Wear的开发流程. 首先,我推荐大家使用Android Studio来进行Wear的开发,这也是谷歌推荐的,本次讲授过程也将以Android Studio作为开发集成环境进行. 下面我们来创建Android Wear项目. 请注意,Android Wear项目中同时包含mobile和w

UWP开发入门(一)——SplitView

接下来会写一个UWP(Universal Windows Platform)开发入门的系列,自己学习到哪里,有什么心得总结,就会写到哪里.本篇对适用于顶层导航的SplitView控件展开讨论. 首先SplitView是Win10 UWP新增的控件,以前虽然可以通过DockPanel模拟出类似的效果,但又哪里及得上M$原生支持的SplitView快捷方便呢. 至于为什么说SplitView适合顶层导航,可以参考目前尚为数不多的UWP APP,比如微博.QQ和网易等Win10 APP,基本都是通过S

安卓开发入门教程全-PopupWindow用法大全

都是一群技术宅,先给大家说一个严酷的现实吧,现在是6月份,多少人顶着大太阳在找工作,现在我们既然有不错的工作或者想通过安卓学好的,我都希望每一个人去实践,就像Android开发入门QQ群:175229978很多人一样,肯去敲代码,不嫌弃麻烦. 首先给大家介绍安卓PopupWindow,不要嫌弃我讲解的有些详细. Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于:AlertDialog的位置固定,而PopupWindow的位置可以随意AlertDial

Unity3D技术之本地客户端开发入门

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 本地客户端开发入门 本地客户端 (NaCl) 是 Google 提供的新技术,其允许您在 Web 页面嵌入本地可执行代码,以便您在无需安装插件的情况下部署性能非常强的 web 应用程序.目前,NaCl 仅支持在 Windows.Mac OS X 和 Linux(含可用的 Chrome 操作系统支

iOS开发入门教程_iOS开发视频教程

iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL)适合人群:初级课时数量:34课时用到技术:IOS,Object-C,OpenGL,XCode,Cocos 2D涉及项目:Cocos+2D.Game Kit蓝牙数据处理等咨询QQ:1840215592 iOS开发入门教程详细查看:http://www.ibeifeng.com/goods-471.html1.1.课程目标iOS开发入门教程内容的目标是初学者入门,让入门者提高,让所有人符合企业招聘的