Java me MIDP2.0版本问题:$type的方法未定义

Java me MIDP2.0版本问题:$type的方法未定义,java-me,midlet,midp,cldc,Java Me,Midlet,Midp,Cldc,我已经编写了一个MIDlet,它可以做一些“高级”的事情:从web上获取图像、调整图像大小、将图像保存在手机上、显示图像 这一切在诺基亚S60第三版FP1仿真器中都能完美运行。这个设备支持MIDP2.0和CLDC 1.1(还有JSR75,我需要它来保存文件)。它还可以在诺基亚E71(物理设备)上正常工作 然后,我尝试在其他几个模拟器上运行MIDlet。其中一个是JavaMeSDK3.0中的DefaultCldcJtwiPhone2,它还声称支持MIDP2.0和CLDC1.1。它没有JSR75,这

我已经编写了一个MIDlet,它可以做一些“高级”的事情:从web上获取图像、调整图像大小、将图像保存在手机上、显示图像

这一切在诺基亚S60第三版FP1仿真器中都能完美运行。这个设备支持MIDP2.0和CLDC 1.1(还有JSR75,我需要它来保存文件)。它还可以在诺基亚E71(物理设备)上正常工作

然后,我尝试在其他几个模拟器上运行MIDlet。其中一个是JavaMeSDK3.0中的DefaultCldcJtwiPhone2,它还声称支持MIDP2.0和CLDC1.1。它没有JSR75,这解释了为什么“FileConnection不能解析为类型”

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

我得到的实际错误:

  • 类型Math的方法ceil(double)未定义
  • 类型列表的方法deleteAll()未定义
  • 类型字符串的方法equalsIgnoreCase(String)未定义
  • 对于可显示的类型,未定义getWidth()方法
当我查看MIDP2.0(即JSR118)API()时,我可以清楚地看到所有这些方法都存在,“因为”标记是MIDP2.0或CLDC 1.1


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

听起来像是在使用CLDC 1.1中定义的方法;您正在使用的仿真器必须只支持CLDC 1.0(这当然可以解释为什么缺少
equalsIgnoreCase()
和任何涉及
double
float
原语的东西)。请参阅完整的API。有关1.0和1.1之间的差异列表,请参见

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

1) 按说明检查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");
}

即使选择了支持CLDC-1.1的仿真器设备(如DefaultCldcJtwiPhone2),您仍然可以将其配置为只模拟CLDC-1.0的手机


至少Netbeans上的项目属性是这样的。

我今天(11/03/10)从以下位置更新后遇到了同样的问题: SDK 1.6.0_17+eclipse ee 3.5.1+Java_ME_平台_SDK_3.0 EA。 致: SDK 1.6.0_18+eclipse ee 3.5.2+Java_ME_平台_SDK_3.0

类型Math的方法ceil(double)未定义 类型Math未定义方法层(double) 类型数学中的方法abs(int)不适用于参数(double)
方法sqrt(double)对于Math类型是未定义的,Eclipse引用了cldc_1.0.jar和cldc_1.1.jar(以及midp_2.0.jar和midp_2.1.jar)

要解决此问题,请执行以下操作: 进入窗口>首选项>Java ME>设备管理>设备>编辑…>库>cldc_1.0.jar>删除


您可以在这里找到更多详细信息:

是的,这些方法确实是CLDC 1.1的一部分,我知道它们的区别。我提到我正在测试的模拟器确实支持CLDC1.1,所以我不应该有这些问题。除非模拟器真的只支持CLDC 1.0…?我认为你的emu在撒谎!我做了一个新项目并添加了System.getProperty行,但它打印出了“CLDC版本是:CLDC-1.1”。尝试使用完全相同的仿真器构建我的真实项目仍然会产生相同的错误。Displayable不在CLDC中,是吗?“尝试使用完全相同的仿真器构建我的真实项目仍然会产生相同的错误。”因此,您在构建时而不是在运行时出现错误?您使用的是IDE还是Java ME SDK?我使用的是Eclipse。看我对你答案的评论。我“解决”了这个问题。因此,当我在应用程序描述符(配置文件,可能特定于EclipseJ2ME环境)中更改目标设备时,CLDC1.1仿真器不会被识别为这样的仿真器。事实证明,当我创建一个新的调试(或运行)配置时,它确实可以正常工作,我可以将仿真器设置为我想要的配置…eclipse bug?您可能想检查负责人是否已经知道了。我正在使用Eclipse,但是我的项目的配置设置为CLDC 1.1,设备属性也指示CLDC 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");
}