2010-12-13 51 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