Java me 用于NFC阅读的j2me程序赢得';签字后不工作

Java me 用于NFC阅读的j2me程序赢得';签字后不工作,java-me,nfc,Java Me,Nfc,我正在尝试制作一个小程序,读取NCF卡(用于SonimXP1301手机) 当程序未签名时,它会工作,但每次读/写操作或NFC读取都会请求用户的许可 在程序签署后(使用官方Sonim证书),它甚至不会启动。。。只是抛出消息“Java应用程序已停止”,没有任何关于发生了什么的详细信息 我不知道从哪里开始解决这个问题。。。一种猜测是,NetBeans的“API权限”设置中缺少一些复选框,但这只是一个疯狂的问题 我不认为我的代码有任何问题,因为Sonim提供的示例代码也有同样的问题-当它没有签名时,程序

我正在尝试制作一个小程序,读取NCF卡(用于SonimXP1301手机)

当程序未签名时,它会工作,但每次读/写操作或NFC读取都会请求用户的许可

在程序签署后(使用官方Sonim证书),它甚至不会启动。。。只是抛出消息“Java应用程序已停止”,没有任何关于发生了什么的详细信息

我不知道从哪里开始解决这个问题。。。一种猜测是,NetBeans的“API权限”设置中缺少一些复选框,但这只是一个疯狂的问题

我不认为我的代码有任何问题,因为Sonim提供的示例代码也有同样的问题-当它没有签名时,程序工作,但签名后,它只说“Java应用程序停止”

(我试着向Sonim Support询问这个问题,但大家都沉默了。)

以下是Sonim自己的NFC阅读示例代码:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.contactless.TargetListener;
import javax.microedition.contactless.DiscoveryManager;
import javax.microedition.contactless.TargetProperties;
import javax.microedition.contactless.TargetType;
import javax.microedition.contactless.ContactlessException;

/**
 * @author parthosarkar
 */
public class TestNFCMidlet extends MIDlet implements TargetListener{
    Form frm;
    DiscoveryManager dm = DiscoveryManager.getInstance();

    public void startApp() {
        this.frm = new Form("Read Tag");
        registerTargetListeners();
        final Command localCommand = new Command("Exit", 7, 1);
        frm.addCommand(localCommand);
        frm.setCommandListener(new CommandListener(){
              public void commandAction(Command paramCommand, Displayable paramDisplayable)
              {
                if (paramCommand == localCommand)
                  notifyDestroyed();
              }
        });
        Display.getDisplay(this).setCurrent(this.frm);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void registerTargetListeners() {
        try {
            // Register listener for each of the supported types
            dm.addTargetListener(this, TargetType.NDEF_TAG);
            dm.addTargetListener(this, TargetType.ISO14443_CARD);
            dm.addTargetListener(this, TargetType.RFID_TAG);
        } catch (ContactlessException ce) {
            ce.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void targetDetected(TargetProperties[] targetProperties) {
        if (targetProperties != null) {
            int NB_properties = targetProperties.length;
            for (int i=0;i < NB_properties;i++) {
                frm.append(targetProperties[i].getUid());
            }
        } else {
            frm.append("No Data");
        }
    }

}
import javax.microedition.midlet.*;
导入javax.microedition.lcdui.*;
导入javax.microedition.contactless.TargetListener;
导入javax.microedition.contactless.DiscoveryManager;
导入javax.microedition.contactless.TargetProperties;
导入javax.microedition.contactless.TargetType;
导入javax.microedition.contactless.ContactlessException;
/**
*@作者帕托沙卡
*/
公共类TestNFCMidlet扩展了MIDlet实现TargetListener{
表格frm;
DiscoveryManager dm=DiscoveryManager.getInstance();
公开作废startApp(){
this.frm=新表格(“读取标签”);
registerTargetListeners();
最终命令localCommand=新命令(“退出”,7,1);
frm.addCommand(localCommand);
setCommandListener(新CommandListener(){
public void commandAction(命令paramCommand,可显示paramDisplayable)
{
if(paramCommand==localCommand)
通知销毁();
}
});
Display.getDisplay(this.setCurrent)(this.frm);
}
公共无效pauseApp(){
}
公共应用程序(布尔无条件){
}
公共无效注册表TargetListeners(){
试一试{
//为每个受支持的类型注册侦听器
dm.addTargetListener(这是TargetType.NDEF_标记);
dm.addTargetListener(这是TargetType.ISO14443_卡);
dm.addTargetListener(这是TargetType.RFID_标签);
}catch(非接触式Sexception ce){
printStackTrace();
}捕获(例外e){
e、 printStackTrace();
}
}
检测到公共无效TargetProperties(TargetProperties[]TargetProperties){
if(targetProperties!=null){
int NB_properties=targetProperties.length;
对于(int i=0;i
我终于找到了一个解决方案:我必须先安装程序的未签名版本,使用一段时间,然后安装同一程序的签名版本。。。现在“java应用程序停止”消息消失了。这看起来像是手机本身的一个bug。你可能想联系制造商。是的,我已经通知了制造商。