现在市面上有很多手机都有了Java功能,如西门子的6688i、6618摩托罗拉的388、T720诺其亚的7210、7650等等,我们可以从网上或通过数据线下载好多有趣的Java小程到手机里,如各种小游戏、小工具
软件,扩展手机的功能。那么,我们
编程爱好者能不能自己动手编手机Java小程序呢?当然可以了!这样我们既练习了编程,又节省了RMB呢!真是一举两得!因为在网上下载Java小程序是收费的。
要想编写手机Java小程序,您需要具有一定的Java基础或C/
C++基础,如果不是,请首先学习Java的基本语法。如果你是C/C++的高手,就可以轻松地DIY你想要的Java小程序了!
一、安装开发工具 目前,各大手机厂商都已发布各自的Java小程序开发包,我们到相关的站点都可找到。本文以西门子6688i为例进行介绍,其它厂商和型号的手机编程与其大同小异,只需安装不同的开发包即可。西门子6688i的Java小程序开发环境为:Borland
JBuilder 7 personal + Borland MobileSet 3.01 + Siemens Mobility Toolkit(SMTK)6688i v1.0 beta 7。关于这三个工具可到http://www.cnjm.net下载。
开发工具的安装与设置
首先安装Borland JBuilder 7 personal,安装完成后初次运行需要注册,选择Have License Key,点Next>,选择Paste license key text,然后把注册码复制进去,确认一次
协议后就OK了。
接下来安装Borland MobileSet 3.01,安装完成后初次运行JBuilder6也需要注册,选择Have License Key,点Next>,选择Paste license key text,然后把注册码复制进去,确认一次协议后就OK了。
最后安装Siemens Mobility Toolkit(SMTK)6688i 1.0 beta8 或 SMTK 3118 1.0 beta8,安装过程中会自动识别JDK的路径为JBuilder6安装路径下的jdk1.3.1。
全部安装完成后还需要配置一下Jbuilder7。打开Jbuilder7,然后点菜单Tools->Configure JDKs,在JDK home path栏点Change,选择6688i SMTK安装的路径,要选到6688i_1b8为止,确定后上面的Name栏会自动变成Siemens,然后点OK搞定。
二、创建工程
启动Borland JBuilder 7 personal,新建一个工程"car",本例程编译执得后是一辆赛车在手机屏幕飞驶而过,带背景音乐背景灯可一亮一灭的而且还有振动呢!
在Jbuilder7中先新建一个工程:点菜单File -> New Project,在对话框(如图1)中输入工程名、路径等内容。请在这里输入Name:car;Directory:c:\windows\jbproject\car(或你自己选择的路径),然后直接点Finish就可以了。

点击菜单File -> New,在对话框中Micro属性页中的MIDIet,点OK(如图2),弹出MIDIet向导对话框,在对话框中输入包名、类名。请在这里输入Package:car;Class:car,然后点Next。 在下一对话框中输入类名,
Class:carscreen;Displayable type:javax.microeditoion.icdui.Canvas,其它用默认即可,然后点 Next,在最后一对话框中直接点Finish就可以了。

图2
这时我们发现,Borland JBuilder 7 personal已把程序的框架帮我们写好了!剩下的工作就是加入我们自己要写的代码了。
三、编写程序代码
Java是基于类的,每个公共类都必须有一个文件相对应。在Borland JBuilder 7 personal视图左边的Project窗口中,我们可看到已经建好了两个文件:car.java和carscreen.java,前者为程序的起始类文件,后者为显示类文件,双击相应的图标可在Borland JBuilder 7 personal视图右边的Project窗口中看到程序代码。(如图3)

接下来我们向两个文件中添加代码如下:(注:蓝字部分为添加的代码,其余为Borland JBuilder 7 personal自动生成的代码)
文件car.java的内容
|
package car; import com.siemens.mp.game.*; import java.lang.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class car extends MIDlet { private static car instance; 图3 private carscreen screen = new carscreen(); public static char d; public Melody cuca; public car() { instance = this; int tempo=120; int cucarachaLength = 34; int cucaracha[][] = { {MelodyComposer.TONE_C3, MelodyComposer.TONELENGTH_1_8 }, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_1_8 }, { MelodyComposer.TONE_E3, MelodyComposer.TONELENGTH_1_4 }, { MelodyComposer.TONE_E3, MelodyComposer.TONELENGTH_1_4 }, {MelodyComposer.TONE_E3, MelodyComposer.TONELENGTH_1_4 }, {MelodyComposer.TONE_E3, MelodyComposer.TONELENGTH_1_8 }, {MelodyComposer.TONE_F3, MelodyComposer.TONELENGTH_1_8}, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_1_4 }, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_1_4}, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_DOTTED_1_8 }, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_1_16}, {MelodyComposer.TONE_D3, MelodyComposer.TONELENGTH_1_8 }, {MelodyComposer.TONE_E3, MelodyComposer.TONELENGTH_1_8}, {MelodyComposer.TONE_C3, MelodyComposer.TONELENGTH_1_4}, {MelodyComposer.TONE_C3, MelodyComposer.TONELENGTH_1_4}, {MelodyComposer.TONE_C3, MelodyComposer.TONELENGTH_1_4 } }; if (MelodyComposer.maxLength() < cucarachaLength) MelodyComposer comp = new MelodyComposer(); comp.setBPM(tempo); try{ for (int i=0; i<cucarachaLength; i++ ) comp.appendNote(cucaracha[i][0], cucaracha[i][1]); } catch (Exception e) { } if (MelodyComposer.maxLength() != cucarachaLength) cuca = comp.getMelody(); //以上代码设置音乐音调的长度 }
public void startApp() { Display.getDisplay(this).setCurrent(screen); while (1<2) { cuca.stop(); cuca.play();//播放音乐 Light.setLightOn();//背景灯亮 Light.setLightOff(); Vibrator.startVibrator();//振动开 try{Thread.sleep(100); } catch (Exception e) { } Vibrator.stopVibrator();//振动停 for(int i = 0; i < 12; i++) { screen.repaint();//在屏幕上画图 try { Thread.currentThread(); Thread.sleep(100L); } catch(Exception exception) { } } d = '\uE1Ef'; screen.c=d; } } public void pauseApp() { } public void destroyApp(boolean unconditional) { } public static void quitApp() { instance.destroyApp(true); instance.notifyDestroyed(); instance = null; } } |