手机Java小程序DIY

王朝厨房·作者佚名  2007-01-04
宽屏版  字体:  |  |  | 超大  

现在市面上有很多手机都有了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;

}

}

文件carscreen.java的内容

package car;

import javax.microedition.lcdui.*;

public class carscreen extends Canvas implements CommandListener {

public carscreen() {

c = ’\uE1EF’; //设置显示图片的地址

try {

jbInit();

}

catch(Exception e) {

e.printStackTrace();

}

}

private void jbInit() throws Exception {

setCommandListener(this);

addCommand(new Command("退出", Command.EXIT, 1)); //加退出按钮

}

public void commandAction(Command command, Displayable displayable) {

if (command.getCommandType() == Command.EXIT) {

car.quitApp();

}

}

public static char c;

protected void paint(Graphics g) {

g.drawChar(c++, 0, 0, 20);

g.drawString(" made by ldm ",0,68, 20);

}

}

四、示例说明

car.java是起始类,由MIDlet继承而来,其中的public void startApp()就像C语言里的main函数一样,是程序第一个执行的函数。 startApp里是开始运行程序所作的一些事,Display.getDisplay()是获取屏幕显示的对象,public car()起始类的构造函数,为其他的就没什么可说的了,依样画葫芦就可以了。

Carscreen是由Canvas类继承而来,同时也需要监测按钮动作。Canvas是一个画板,可以在上面画图、画字符串等等。g.drawChar(c++, 0, 0, 20)是以坐标(0,0)作为左上角画一幅位图,g.drawString("made by ldm ",0,68, 20)是在屏幕底部中间写一行字。 commandAction是按钮按下的响应函数,判断出哪个按钮被按下了,从而可以采取相应的措施。

常用类简介

MIDlet类

老实说我对这个类的理解也不深刻,也就是照着其他的程序依样画葫芦,我认为这是一个起始类,程序执行总是从这个类开始。必须要有的事件函数是startApp、pauseApp、destroyApp,顾名思义,就是起始、暂停、终止的时候起作用。

Form类

Form是一个窗体,有标题,可以显示文字也可以列出选项、设置按钮。

Canvas类

Canvas是一个画板,可以在上面画图、画字符串等等。必须要有的事件函数是paint,在显示的时候调用。

Graphics类

Graphics是一个画图的类,有画框、画线、画块、画圆、画字符串等功能函数。

这时由于篇幅所限只能简要的介绍一下,不能详尽,感兴趣的朋友可以参考Borland MobileSet 3.01和 Siemens Mobility Toolkit(SMTK)6688i v1.0 beta 7中的帮助,里面有非常详细的介绍,不过你的英文可要好喔! 图4

五、编译运行

点菜单Run -> Run Project, JBuilder会自动调用6688i的仿真程序对程序进行仿真。激动人心的时刻到了!你会在6688i的仿真程序中看到一辆赛车飞驰而过,伴着Big Big World的乐曲,而且还带振动呢!真是COOL毕了!(如图4)

打包执行

在视图左边的Project窗口中,用鼠标右键点击car.java文件,在弹出菜单中选择"Micro Run Using car",运行后Jbuilder会在工程目录中自动生成car.jar和car.jad两个文件。

下载到MMC卡上的时候,现在java\jam\game下建立一个car目录,然后将car.jar复制到该目录下,另外还要将工程目录下jad目录中的car.jad也复制

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有