java-me – MIDP 2.0版本问题:$type未定义$type

我编写了一个MIDlet来做几个“高级”的事情:从网上获取图像,调整大小,将它们保存在手机上,然后显示它们.

这一切都在诺基亚S60第三版FP1仿真器中完美运行.该设备具有MIDP 2.0和CLDC 1.1支持(也是JSR75,我需要它来保存文件).它也可以在诺基亚E71(物理设备)上运行.

然后我尝试在其他几个模拟器上运行MIDlet.其中之一,来自Java ME SDK 3.0的DefaultCldcJtwiPhone2,也声称支持MIDP 2.0和CLDC 1.1.它没有JSR75,这解释了为什么“FileConnection无法解析为类型”.

但是,这并不能解释为什么List.deleteAll(),String.equalsIgnoreCase(String)和其他一些未定义的原因.

我得到的实际错误:

>对于Math类型,方法ceil(double)未定义
>类型List的方法deleteAll()未定义
>类型为String的方法equalsIgnoreCase(String)未定义
>对于Displayable类型,方法getWidth()未定义

当我查看MIDP 2.0(即JSR118)API(http://java.sun.com/javame/reference/apis/jsr118/)时,我可以清楚地看到所有这些方法都存在,“since”标签是MIDP 2.0或CLDC 1.1.

我的问题:为什么MIDP 2.0支持的模拟器不能访问所有MIDP 2.0方法?或者,我做错了什么?

最佳答案 听起来像是在使用CLDC 1.1中定义的方法;你正在使用的模拟器必须只支持CLDC 1.0(这肯定会解释缺少equalsIgnoreCase()和任何涉及double和float原语的东西).请参阅完整的API
here.有关1.0和1.1之间差异的列表,请参阅
here.

编辑:
检查设备CLDC版本的一些方法:

1)检查microedition.configuration系统属性,如here所述.

System.out.println("The CLDC version is:  " + System.getProperty("microedition.configuration"));

2)检查仅在1.1中支持的类的存在.

try {
    Class.forName("java.lang.ref.WeakReference");
    System.out.println("It's CLDC 1.1");
} catch (ClassNotFoundException e) {
    System.out.println("It's CLDC 1.0");
}
点赞