java-me - MIDP 2.0 版本问题 : $method is undefined for $type

标签 java-me midlet midp cldc

我编写了一个 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) 和其他一些未定义。

我得到的实际错误:

  • 对于 Math
  • 类型的方法 ceil(double) 未定义
  • 未定义类型 List
  • 的方法 deleteAll()
  • 对于类型 String
  • 未定义方法 equalsIgnoreCase(String)
  • 对于可显示类型
  • 未定义方法 getWidth()

    当我查看 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() 以及任何涉及 doublefloat 原语的原因)。查看完整的 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/

    相关文章:

    java - 是否可以在 J2ME 中使用 webservice 发布字节数组数据?

    java - j2me :question about Landmark class

    networking - 如何在 j2me 编码中应用 Assisted - GPS 或 AGPS 技术

    java - 如何使用eclipse部署MIDlet应用程序?

    java - 如何在J2ME中无需单击按钮即可激活功能键?

    java - J2ME - 代码签名 - 适用于诺基亚、三星、Micromax、LG 等所有手机的证书是什么?

    java - 将数据保存在内存中和将其写入驱动器之间是否存在最佳点?

    java - Midlet-浏览器交互

    java-me - j2me 中的 midlet.platformRequest

    java-me - 如何控制多个 Rss 文件的流量