【问题标题】:LWUIT- out of memory exception in JavaMELWUIT-JavaME 中的内存不足异常
【发布时间】:2011-10-17 06:53:34
【问题描述】:

我正在使用 Netbeans IDE 在 Java ME 中开发一个应用程序,其中我正在创建 3 个表单,其中包含 ButtonCommand(OK 和返回)和 Image 在第一个 Form 中。

使用 OK Command 我可以将控制权转移到第二种形式。这行得通

在第二个 Form 我有 2 个 Command 确定并返回。单击确定后,它应该转到第三个Form。单击返回时,它应该返回到第一个Form

当我在2号Form时,我既不能转3号也不能转1号Form

我收到以下异常......

java.lang.OutOfMemoryError

(堆栈跟踪不完整) 在过渡绘制期间发生异常,这可能在过渡期间调整大小的情况下有效

请帮帮我。 提前致谢

【问题讨论】:

    标签: java-me lwuit out-of-memory


    【解决方案1】:

    Sanjay 的回答是正确的,但是如果它不能解决问题,我猜你的代码中某处有递归导致堆栈溢出。许多 J2ME VM 未能触发堆栈溢出异常,而是抛出内存不足错误。

    只需使用调试器并遍历代码即可查看递归。

    【讨论】:

      【解决方案2】:

      根据您提供的信息,第一种形式的图像可能存在问题,您需要跟踪您使用的图像的大小。加载图像时,会将数据解压缩为像素阵列。每个像素可能需要 2 到 4 个字节,具体取决于设备。假设一个 800x600 的图像有 480,000 个像素,因此需要至少 1Mb 的堆(可能高达 2Mb)来加载它。这将解释为什么您的内存不足。在转换期间,LWUIT 可能会制作图像的本地副本以“转换”(重绘)它(虽然我不确定)所以如果您在转换时需要更多内存也就不足为奇了。

      这是一本可能对您有所帮助的好书:Memory Leaks In LWUIT And Tracking Memory In Java ME

      【讨论】:

      • 嗨桑杰,我试过不使用图像,只剩下一个按钮。但仍然存在同样的问题
      【解决方案3】:

      您可以扩展模拟器的内存。您必须单击项目的属性/平台/管理模拟器/工具和扩展/打开首选项/存储 在这个窗口中你会看到堆大小,在这里写 1000 f.e.然后再试一次。

      【讨论】:

      • 通常 s40 设备具有 1MB 或 2MB 堆内存。我们无法扩展内存的大小。
      【解决方案4】:

      当您切换到该类的第二或第三遍对象并使用下一个表单构造函数显示对象(来自 mdilet)时,当您调用返回按钮时,只需编写一行代码,如 display.setCurrent(previous_form_object); 并且您知道如何单击确定命令时转到下一个表单。还有 Sanjay 提到的一件事。

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多