2

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

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

更新:它在模拟器上运行良好。我还想提一提的是——代码仅在创建这 14 个实例并将它们添加到向量时才停止执行。到那时,代码执行得很好。

4

4 回答 4

3

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

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

于 2010-05-05T20:11:36.050 回答
2

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

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

更有可能的是:

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

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

如何找到未捕获的异常:

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

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

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

于 2010-05-06T13:28:16.873 回答
2

您可以在设备上调试。如果您使用的模拟器是诺基亚 SDK 的一部分,那么其他地方应该有设施来执行设备上的测试和调试。(我会发布更多细节,但我最近只用索尼爱立信手机做过。)

另一种选择是使用诺基亚工具,当您的应用程序在您的设备上运行时(例如通过蓝牙),您可以使用该工具查看标准输出和错误。

于 2010-05-05T20:31:08.280 回答
0

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

问候

朱奈德

于 2010-05-12T06:41:00.577 回答