BlackBerry 出现 Module xxx' has verification error 问题解决办法

如果是MIDLET请看官方的解释:

http://www.blackberry.com/knowledgecenterpublic/livelink.exe/fetch/2000/348583/800708/800647/Support_-_MIDlet_has_verification_error_at_offset.html?nodeid=800711&vernum=0

 

我使用的不是MIDLET同样出现了问题,

 

http://supportforums.blackberry.com/t5/Java-Development/verification-error-1756/td-p/125387

 

那么引起verification error的原因是使用了XXX.class代码,

比如:

 

 

Java代码   收藏代码
  1. EventManager.registerListener(new EventTypeFilter(thisnew Class[]{  
  2.      myEventObject.class  
  3. }));  

 

 

上面的代码就不行,虽然RIM API说支持,但依然出现了问题,改写成下面的:

 

 

Java代码   收藏代码
  1. EventManager.registerListener(new EventTypeFilter(thisnew Class[]{  
  2.     new myEventObject().getClass()  
  3. }));  

 就可以了。

 

另外还有其他的的原因,我从CSDN转来的,保存一下吧。

 

http://blog.csdn.net/wang_shaner/archive/2011/01/17/6145963.aspx

 

 

 

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.

The following is a list of possible solutions to prevent or correct verification errors:

If you started by building a Java Archive (JAR) file and then used the RIM Application Program Compiler (RAPC) to create .cod files, make sure you turn obfuscation off when building the JAR file. The RAPC compiler performs its own obfuscation and issues may occur if the code is already obfuscated. Remove any  System.out.* calls. These generally do nothing on the BlackBerry smartphone, but they might cause verification errors. Remove unused  import statements. Explicitly specify the access for each function or variable. For example, make sure each one is specified as  public ,  private , or  protected . If you are working with a MIDlet, make sure the MIDlet class is declared as  public . Verification errors may occur if the COD file is corrupted or if it was not signed correctly. Make sure that you perform a clean rebuild and that you re-sign your application. Reinstall the application on the BlackBerry smartphone. Comment out any non-executable code. Verification errors might be related to the size of the main code file and the library files. If you comment out non-executable code, the file sizes change, which may correct the problem. If you have created any classes that inherit from RIM classes, change the name of any custom methods and members that you created in those classes. This makes sure that you have not named any methods or members of the same name in the internal RIM classes. If your application is using BlackBerry® Device Software 3.8 or later, verification errors occur when an application that implements the  javax.microedition.rms.RecordStore class is compiled using BlackBerry® Java® Development Environment (BlackBerry JDE) earlier than version 4.0. This occurs if the application uses either the  addRecordListener or  removeRecordListener methods of the  RecordStore class. To resolve this issue, recompile the application using BlackBerry JDE 4.0 or later. There is a problem with how the BlackBerry® Java® Virtual Machine (BlackBerry JVM) handles the referencing of a class directly within the constructor of another class. The following is an example:

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

To work around this issue, do not make the class call within a constructor as shown in the following example:

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

Remove references to a static instance variable from an inner class. For example, the following code example could cause an error:

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

There are a few ways you can remove these references, such as creating get/set methods for var in the outer class or modifying the logic to pull MyInnerClass out of MyOuterClass .

The build procedure normally compiles from the java source file with the  javac command, and then runs preverify.exe file and then RAPC. Add the following command line arguments to  javac to help avoid issues in earlier versions of the RAPC:

javac.exe -source 1.3 -target 1.1

Some methods that are very long can cause verification errors. By breaking these methods into helper methods, you can reduce the likelihood of verification errors. Although not as likely, some very long method definitions (with 10 or more parameters), and some very long constant definitions (long package structure and/or long names) can also cause verification errors.
一般情况下将引用的jar包从build path里面remove,然后再重新add就可以了。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值