最近做JavaME开发遇到的问题
![]()
由于生理上的需求,所以最近需要在手机上搞些开发,于是涉足Java Micro Edition,也就是以前的那个J2ME。
话说我觉得JavaME是做得挺失败的,各大Smartphone的OS都不大鸟他,也就symbian对它好点,C++和J2me的支持基本同步,但是Nokia收购了QT以后还能对它有多好呢?
但是木办法,在iPhone、Android、Win-Mobile、BlackBerry组成围攻之中,破破烂烂的J2ME能生存到现在直到四面楚歌也不容易阿。
不过从技术上说这个玩意还是不错的,可惜哈,可惜哈…SUN是个呆头鸟Geek,不懂得怎么博得MM心。
下面Shellex记录一些从中遇到的问题,当作备忘。
安装WTK啊,配置Eclipse啊,配置EclipseME插件啊之类的屁话就不说了。我采取先描述症状,再说解决方案的叙述方法。
P1: 程序使用第三方库,于是运行时出现巨SB的错误:java.lang.NoClassDefFoundError: XXXXXX
S1: 基本上可以确定了,是由于打包时没有将此第三方库打包进去导致。所以需要在Project的Build path里面的Order And Export里面勾选该第三方库。然后在项目上点右键选择J2ME里面的Create Package即可。关于这个话题,请看这里和这里。
P1+: 恭喜你,你和Shellex一样在Create Package时出错导致无法将第三方包加入生成的jar中。一般来说此时的Eclipse会提示一些很SB的反正我看不懂的错误。
S1+: 这时候还是不依赖IDE比较好。GUI的方式是使用WTK自己的工具ktoolbar。在那里新建一个项目,然后把你的eclipse里面这个项目的内容同步搞过去,然后配置一下,点build。如果出错就改代码,不出错就点运行,没问题就在project菜单里面找Package->Create Package即可。
BTW: 在Linux下,WTK 2.5.2 建立的项目会放在 ~/j2mewtk/2.5.2/apps/ 下。别瞎找。
P2: 如何让模拟器读取本地文件系统?
S2: 开启模拟器以后,菜单MIDLet-> Externel Events的File Connection选项卡即是配置文件系统地方。注意这个鸟地方使用的是相对路径,对应的是~/j2mewtk/2.5.2/appdb/模拟器名称/filesystem/。可以在这里自行添加文件和目录什么的。
P2+: 无法浏览文件,权限不够,模拟器询问时,连允许的选项都没有。
S2+: 在模拟器的首选项的“安全”一节中设置JTWI为trusted或者maximum即可。
P3: 不管在eclipse中运行还是在WTK ktoolbar中运行模拟器,模拟器就一直SB地定在哪儿,屏幕和按键都没有任何反应和响应,直到大约10分钟后,恢复正常。
S3: 因为模拟器在尝试“使用网络”,在/etc/hosts中添加本地主机名到本地回环地址的映射可以解决问题。当然,你断掉网络也行。
cat /etc/hosts
# /etc/hosts: Local Host Database
...
# IPv4 and IPv6 localhost aliases
127.0.0.1 localhost
::1 localhost
127.0.0.1 shellex-gentoo
P4: 在eclipse中,模拟器启动后马上消失,输出栏说没有找到MIDlets Suit云云。
S4: 在Run Configurations中找到Wireless Toolkits Emulator部分,在MIDlet选项卡的Executable一节中设置MIDlet为com.sun.midp.midlet.Selector或者使用jar直接指定你生成的jar文件。
P5:打包的程序没法在真机上安装,在模拟器上正常。
S5: 检查你的jar中的MANIFEST.MF文件和jad文件是否一致。可能存在的问题是CLDC和MIDP使用的版本不一致导致。解决方法是手工改或者在WTK ktoolbar的Settings的API Selections中确定你选择的Target Platform的支持符合你的预期。
shellex, I like the layout of all your articles, but I have no idea regarding java.