现在的位置: 首页 > 综合 > 正文

JDK1.6 编译CLDC1.1/MIDP2.0

2012年08月10日 ⁄ 综合 ⁄ 共 1057字 ⁄ 字号 评论关闭

    最近项目需要移植MIDP, 网上搜索了一下,基本上都是建议用JDK 1.4来编译JDK, 或者直接JDK1.6编译为1.4的版本, 实际上都是1.4版本, 直接用1.6编译会出错。 这样在用1.6编译的一些应用程序可能就不能在上面顺利运行。
   没办法,只好自己根据编译的错误提示一点一点修改。
一、 先编译CLDC, 按照其他文档说的,先把01.04修改为1.1版本。
     编译出现最多的错误就是找不到“StringBuider”类。这是由于在JDK1.5之后, 用“StringBuilder”代替了“StringBuffer”类。两者的接口基本一致, 差别在于前者是线程安全的, 后者则仅适合在单线程环境中使用。 通过查看JDK1.6的源码, 发现StringBuilder涉及到的类太多, 不适合直接移植到MIDP上使用,那样修改的工作量将会巨大。 因为线程安全的问题在项目中并不重要, 经过对比两者的源码码, 我决定直接用StringBuffer 改造为StringBuider。 直接将“StringBuffer”替换为“StringBuider”, 重新编译CLDC。 只有三个错误, 因为Sringbuilder.java中声明了了三个Native函数:public native  String toString()、public native StringBuilder append(int i)、public native synchronized StringBuffer append(String str)。代码中没有定义导致link Error。将他们直接修改为JAVA的函数, 去掉Native, 加上定义,finished。
另外, Stirng.java 中并没有根据StringBuilder作为参数的构造函数, 只有StringBuffer作为参数的。 添加一个构造函数 public String(StringBuffer buffer), 此文件搞定。
在ClassReader.java中, 存在将enum 作为变量名使用。 在jdk1.6中, enum是作为关键字存在的, 不能用为变量名。 修改一下, 我直接改为enmu1, 此文件OK.
二、 编译MIDP。
     编译好CLDC后, MIDP就轻松了。还有两个错误, 根据错误提示找到错误的地方:
DateField.java,Ln160处,  将条件语句直接拆分为if语句。
Form.java, Ln2092,将条件语句直接拆分为if语句。

再编译OK。

     运行Java程序, 正常。 完成CLDC1.1/MIDP2.0。

【上篇】
【下篇】

抱歉!评论已关闭.