我编写了一个 MIDlet,它可以做一些“高级”的事情:从 Web 获取图像、调整它们的大小、将它们保存在手机上、显示它们。
这一切都在诺基亚 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) 和其他一些未定义。
我得到的实际错误:
当我查看 MIDP 2.0(即 JSR118)API(http://java.sun.com/javame/reference/apis/jsr118/)时,我可以清楚地看到所有这些方法都存在,“因为”标签是 MIDP 2.0 或 CLDC 1.1。
我的 问题 :为什么支持 MIDP 2.0 的模拟器不能访问所有 MIDP 2.0 方法?或者,我做错了什么?
最佳答案
听起来您正在使用 CLDC 1.1 中定义的方法;您使用的模拟器必须仅支持 CLDC 1.0(这当然可以解释缺少 equalsIgnoreCase()
以及任何涉及 double
和 float
原语的原因)。查看完整的 API here .并见 here有关 1.0 和 1.1 之间差异的列表。
编辑:
检查设备 CLDC 版本的一些方法:
1) 如 here 所述,检查 microedition.configuration 系统属性.
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");
}
关于java-me - MIDP 2.0 版本问题 : $method is undefined for $type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415778/