J2ME开发入门

最近,在网上看到一篇写个J2ME初学者的文章,觉得不错! 特拷贝过来,供需要的朋友和自己学习 ,呵呵```

 

 

                       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 对象继承一个接口,再定义一个基于此对象的线程,然后将此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,removeComman d,这两个方法是对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.       对不熟悉的类,应该多写小代码来实验其用法,别人讲的永远不如自己研究出来的结果牢靠。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值