2010-12-13 57 views

回答

1

KeyCodeNumber异常与验证过程没有关系。

黑莓published an article描述如何防止验证错误:

When developing Java applications for the BlackBerry smartphone, you may encounter any of the following verification errors or errors similar to the following:

Verification Error 3141 Module 'MyMIDlet' has verification error (<###>) at offset <###>. Error starting MyMIDlet: Module 'MyMIDlet' has verification error (<####>) at offset <###>." These errors often occur when creating MIDlets. They are inherently hard to debug because the same error message can apply to a number of problems.

以下是可能的解决方案,以防止或纠正验证错误的清单:

  1. 如果通过构建Java 归档开始(JAR)文件,然后使用 RIM应用程序编译器 (RAPC)创建.cod文件,使 确定您关闭混淆时 构建JAR文件。 RAPC 编译器执行自己的 混淆,如果 代码已被混淆,则可能会发生问题。
  2. 删除任何System.out。*调用。这些 通常对BlackBerry智能手机的 无效,但它们 可能会导致验证错误。
  3. 删除未使用的导入语句。
  4. 明确指定每个函数或变量对 的访问权限。对于 示例,请确保每个都是指定为公共,私人或 保护的 。
  5. 如果您正在使用MIDlet,请确保将MIDlet类别 声明为公共。
  6. 如果 COD文件损坏或者 未正确签名,则可能会发生验证错误。确保 您执行干净的重建,并且 您重新签署您的应用程序。 在BlackBerry智能手机上重新安装应用程序 。
  7. 注释掉任何不可执行的代码。 验证错误可能与 与主代码文件 和库文件的大小有关。如果 注释掉不可执行代码,则 文件大小发生更改,这可能会纠正 问题。
  8. 如果您已经创建了 从RIM类继承任何类,改变你在那些 类创建的任何自定义方法和 成员 名。这可确保您 未在 内部RIM类中命名任何方法或 同名成员。
  9. 如果您的应用程序使用的是 BlackBerry®Device Software 3。8或 后,当实现 应用程序的 javax.microedition.rms.RecordStore 类使用的BlackBerry Java®的开发环境 (黑莓JDE)早于 4.0版编译出现验证错误 。如果 应用程序使用任一 addRecordListener或 RecordStore类的 removeRecordListener方法发生这种情况。要解决此问题 ,使用BlackBerry JDE 4.0或更高版本重新编译应用程序 。
  10. 没有与 为BlackBerry®Java®虚拟机 (黑莓JVM)如何处理另一个 类的构造函数中的 引用一类直接 的问题。下面是一个例子: 的Class1的Class1 =新 的Class1(Class2.class.getName());

要解决此问题,不要让一个构造函数中的高级应召如下面的例子:

Class1 class1; 
String className = Class2.class.getName(); 
Class1 = new Class1(className); 

从内部类中删除静态实例变量的引用。例如,下面的代码示例可能会导致一个错误:

public class MyOuterClass { 
    static int var; 
    class MyInnerClass { 
     public void doSomething() { 
      var = 7; 
     } 
    } 
} 

有几个方法可以删除这些引用,如在外部类创建get/set方法对VAR或修改逻辑拉MyInnerClass MyOuterClass之外。

  1. 构建程序通常 从Java源文件 使用javac命令编译,然后 运行preverify.exe文件,然后 RAPC。 参数添加以下命令行的javac,以帮助避免在早期版本的 RAPC的 问题:

    的javac.exe -source 1.3 -target 1.1

  2. 是很长的一些方法可以 原因验证错误。通过 打破这些方法为辅助 方法,可以减少验证错误的 可能性。

  3. 虽然不作为可能,一些很 长法定义(具有10个或 多个参数),以及一些很长的 常数定义(长包 结构和/或长的名称)可 也导致验证错误。

+0

伟大的职位,但是这就是为什么移动开发太疯狂;) – drubin 2010-12-21 20:42:41