Java ME应用程序在模拟器中运行良好,但在部署到N70时崩溃。有什么方法可以确定崩溃的原因?

时间:2010-05-05 19:58:19

标签: java-me midp cldc

我为CLDC平台开发了一个Java ME应用程序。它在模拟器中执行时工作正常。但当我将它部署到我的N70手机时,手机中的应用程序根本无法启动。在我的应用程序中有大约14个类,我正在创建每个类的实例,并将它们放在应用程序启动的向量中。这些类只有一个变量和两个方法。这种大量实例的创建能否成为崩溃的原因?

有什么方法可以找出应用程序无法在手机中启动的原因吗?

更新: 它在模拟器上运行良好。还有一件事我要提的是 - 代码只在创建这14个实例并将它们添加到向量的位置停止执行。直到这一点,代码执行得很好。

4 个答案:

答案 0 :(得分:3)

这可能取决于您在创建这些实例的代码中的位置。如果要在MIDlet构造函数或startApp方法中创建它们,请尝试将初始化移动到应用程序的run方法中。

调试不能在手机上启动的J2ME应用程序的一种方法是在代码中添加“printf”样式调试消息,以便在记录存储系统中写入,并在应用程序中添加另一个MIDlet以从RMS读取并显示那些消息。 或者您可以只评论一些代码并查看它是否有效。

答案 1 :(得分:2)

您可以在设备上进行调试。如果您使用的仿真器是诺基亚SDK的一部分,那么其他地方应该有设施来进行设备上的测试和调试。 (我会在此发布更多详细信息,但我最近只使用索尼爱立信手机完成了此操作。)

另一种选择是使用Nokia tools,允许您查看应用程序在您的设备上运行时的标准输出和错误(例如通过蓝牙)。

答案 2 :(得分:2)

您的应用程序实际崩溃Java虚拟机字节码解释器线程并终止整个本机进程的可能性非常小。

之前已经发生过,但在确信实际崩溃之前,您需要消除其他几个潜在的问题。

更有可能是:

  • 您的MIDlet未创建或未启动,因为MIDP运行时认为它不正确 或
  • 您的MIDlet会抛出一个您没有捕获的异常,这可能会让它看起来像是被残酷地终止。

由于MIDlet安装程序应该阻止您安装错误的MIDlet,因此更有可能发生未捕获的异常问题。

如何找到未捕获的异常:

  • 从最简单的HelloWorld MIDlet开始,使用Form,这样您就可以在屏幕顶部轻松插入更多StringItem
  • Thread
  • 中创建并开始新的MIDlet.startApp()
  • 在覆盖Thread.run()时,添加try{}catch(Throwable){}块。
  • 在该区块内,执行原始MIDlet所做的任何事情。
  • 使用表单作为调试的标准输出。

您可以使用表单日志记录来确保不输入无限循环,显示异常类和消息,标记逻辑里程碑,以显示变量值...

这是弄清楚发生了什么的第一步。

答案 3 :(得分:0)

我也遇到了类似的问题,当我将MIDLET重新编译为Midlet 1.0时,它运行良好。似乎N70无法运行新版MIDLET。我认为你降级并重新测试你的midlet。

此致

朱奈德