要想用Eclipse开发J2ME的程序,eclipseme 和sun公司的 wtk必不可少,当然,其他模拟器如诺基亚、摩托罗拉、索尼爱立信、三星等的模拟器
也都没有问题啦!
下载最新版的必备软件,
1 eclipse 3.2.2 到下面这个地址去找找
http://www.eclipse.org/downloads/
2 eclipseme 1.6.7
http://sourceforge.net/project/showfiles.php?group_id=86829
3 wtk2.5 (Sun Java Wireless Toolkit 2.5 for CLDC) sun公司提供的无线开发工具包
http://java.sun.com/products/sjwtoolkit/zh_download-2_5.html
安装配置步骤
1.安转Eclipse3.2.2(必须先安装好jdk1.5或以上版本,这里不说明了)
2.安装EclipseMe1.6.7
3.安装WTK2.5
4.测试HelloWorld
5.使用Nokia模拟器测试
配置具体步骤(必要的)
1.1 安转Eclipse3.2.2
把下载到的zip文件解压后直接放到c盘根目录即可,当然,你可以放到你喜欢的任何地方,这里为了描述方便放到c:/eclipse
1.2 运行eclipse,如果能正常启动,说明jdk安装正确,否则,你可能需要一个新版本的jdk,到sun的网站去下。
1.3 把eclipse1.6.7 解压到一个临时目录中,把目录和文件
plugins
features
site.xml
全部copy到eclipse的目录中即可
1.4 启动eclipse3.2.2 从菜单 windows->references...进入
在references面板的左边的树状目录中,应该多了一个J2ME项。
1.5 继续安装WTK2.5 ,把主目录安装到C:/WTK25下,其他的按默认安装就行
好,软件都安装好了,下面是最重要的配置部分
1.6 修改Eclipse的配置,使其邦定EclipseME框架
1.6.1 在eclipse的配置目录configuration中找到配置文件config.ini
1.6.2 用文本编辑器打开,增加一个属性定义
osgi.framework.extensions=eclipseme.core.hooks
如果该属性已经存在,则把值eclipseme.core.hooks加上
注意:这一行必须加在config.ini的eof=eof前面,不能加到后面。否则,可能会导致Eclipse启动失败。
1.6.3 保存config.ini
1.6.4 重新启动 eclipse
1.7 修改eclipse的build path 和debug选项
1.7.1 把源代码和输出分离开
1.7.1.1 从菜单 windows->references...进入
1.7.1.2 展开references面板的java项,然后点选 build path
1.7.1.3 默认情况下 "source and outpub folder"项的 "project"为选中,我们修改这个默认设置,把"folders"选中
这样,就可以让eclipse把源代码和输出分离开。
1.7.2 修改调试选项的异常挂起设置和超时时间(很重要)
1.7.2.1 从菜单 windows->references...进入
1.7.2.2 展开references面板的java项,然后点选 debug
1.7.2.3 在Suspend Execution项中,把
"Suspend execution on uncaught exceptions"
"Suspend execution on compilation errors"
这两项的勾去掉
1.7.2.4 在面板的最下面,把 debugger timeout(ms)设置为 15000(这个参数太重要了,一定要记得改)
1.8 为eclipseme配置模拟器
1.8.1 从菜单 windows->references...进入
1.8.2 在references面板左侧的树种,展开 "J2ME" 项
1.8.3 选中 Devices Management,点击右边的 "Import..."按钮
1.8.4 在弹出的Import Device 面板中,点击按钮"browse...",然后选择WTK的bin目录,确定后,点击" refresh"按钮
就会自动去找到模拟器了。点击“finish”按钮返回。
1.8.5 这样,模拟器就配好了,如果需要其他的模拟器,照这样做就可以了。
2 创建MIDlet应用程序。
有两种方法创建MIDlet应用程序
方法1:(适用于从无到有)创建MIDlet工程
从菜单 File ->New ->Project 进入工程面板
然后展开J2ME ,其中只有一个 J2ME MIDlet Suite
输入工程名称后,就可以选择你需要的模拟器了,一路下去就行了。
方法2.(适用于往有工程里面添加MIDlet程序)
从菜单 File ->New ->others 进入NEW面板
然后展开J2ME ,其中有2个选项
J2ME MIDlet
J2ME MIDlet Suite
如果选择 J2ME MIDlet ,则创建一个MIDlet,选择J2ME MIDlet Suite,则创建一个MIDlet工程。
3 调试、运行
在工程中,在需要调试或运行的主要类上点击右健,从右健菜单中选择
run as -〉Emulated j2me Midlet
或者
debug as -〉Emulated j2me Midlet
即可进行运行和调试
4 打包
在需要打包的工程目录上点击右健,从右键菜单中选择
j2me->create package 即可
5.jad 的配置
略。
项目创建成功后,我们来创建一个MIDlet 文件,MIDlet 是J2ME 项目文件的入口文件,也是必须的。在/Hello/src 目录下创建Hello.java,采用默认包,注意,此时创建的java程序必须是与我们在创建项目时键入的MIDlet 类名一致。
一个MIDlet在生命周期中有三个状态Active(激活),Paused(挂起)和Destroyed(销毁)。这些状态直接对应三个方法startApp(),pauseApp(),destroyApp()。一个典型的MIDlet,大多数处于Active或Paused状态,当MIDlet关闭时进入Destroyed状态,直到完全从内存中移出。我们自己的MIDlet程序要覆盖(override)相关的生命周期方法。例如,当一个游戏MIDlet启动时,你可能要创建对象或装载数据;当MIDlet暂停时,你可能应当关闭网络连接并暂停音乐;最后MIDlet销毁时要释放分配的资源,同时保存相关的游戏数据。
下面是我们简单的MIDlet:
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class Hello extends MIDlet implements CommandListener {//要继承MIDlet类 private SCanvas canvas;//绘图的画布,绘图都在这个上进行。 private Display display;//屏幕管理器 public void startApp() {//MIDlet类中定义的方法之一,启动MIDlet if (canvas == null) { display=Display.getDisplay(this);//得到这个MIDlet的屏幕管理器 canvas = new SCanvas(); Command exitCommand = new Command("Exit", Command.EXIT, 0); canvas.addCommand(exitCommand); canvas.setCommandListener(this); } display.setCurrent(canvas);//将当前MIDlet的屏幕设为canvas // Start up the canvas canvas.start(); } public void pauseApp() {}//MIDlet类中定义的方法之一,暂停MIDlet,这里什么都不做。 public void destroyApp(boolean unconditional) {}//MIDlet类中定义的方法之一,销毁MIDlet。这里什么都不做。 public void commandAction(Command c, Displayable s) { if (c.getCommandType() == Command.EXIT) { destroyApp(true); notifyDestroyed(); } } } class SCanvas extends Canvas { public SCanvas() { super(); } void start() { repaint(); } public void paint(Graphics g) { // 清屏 g.setColor(0, 0, 0); // black g.fillRect(0, 0, getWidth(), getHeight()); g.setColor(255, 255, 255); // white int y = 0; String screenSize = "屏幕大小: " + Integer.toString(getWidth()) + " x " +Integer.toString(getHeight()); g.drawString(screenSize, 0, y, Graphics.TOP | Graphics.LEFT); // 总内存和自由内存数 Runtime runtime = Runtime.getRuntime(); y += Font.getDefaultFont().getHeight(); String totalMem = "总的内存: " + Long.toString(runtime.totalMemory() / 1024) + "KB"; g.drawString(totalMem, 0, y, Graphics.TOP | Graphics.LEFT); y += Font.getDefaultFont().getHeight(); String freeMem = "可用内存数: " + Long.toString(runtime.freeMemory() / 1024) + "KB"; g.drawString(freeMem, 0, y, Graphics.TOP | Graphics.LEFT); } }