Javacard可共享接口:lookupAID返回AID但getAppletShareableInterface返回null

时间:2012-09-12 18:58:43

标签: applet client javacard

编辑2:发现错误。我试图在构造函数中初始化Shareable对象。那时客户端的register方法尚未调用,因此JCRE没有其AID。虽然我的服务器的getShareableInterfaceObject(AID clientaid,byte参数)方法不要求客户端的AID为!= null,但JCRE可能会这样做,因为它为我的客户端调用此方法。我现在在处理我的第一个APDU时初始化我的Shareable对象,现在它可以正常工作。

顺便说一下,非常感谢你帮助格式化我的帖子。绝对让它更容易阅读!


我是Java Card开发的新手,我无法让我的Shareable界面工作。

我有一个接口类,声明我的客户端小程序想要使用的函数。我的服务器applet实现了这个类。我的客户端小程序查找AID并尝试通过调用getAppletShareableInterface()来获取接口。但这总是返回null

我的服务器小程序getShareableInterface()只包含return this;,所以我猜错误在于其他地方。但我不知道在哪里。

我正在使用JCWDE并逐步执行代码,我看到我的服务器applet调用了register,因此客户端applet应该能够找到它。谁能给我一些可能出错的指示?

编辑:

public interface IF extends Shareable {
    public void method();
}

public class Server extends Applet implements IF {
    public getShareableInterfaceObject {
        return this;
    }
}

public class Client extends Applet {

    private Client() {
        AID ServerAID = JCSystem.lookupAID(byteArrayAID, (short)0, (byte)byteArrayAID.length);
        interface = (IF)JCSystem.getAppletShareableInterfaceObject(ServerAID, (byte)0x00);
    }

    public void process(APDU apdu) {
        interface.method();
    }
}

lookupAID返回正确的AID,但getAppletShareableInterfaceObject返回null,就好像服务器applet不存在一样。

1 个答案:

答案 0 :(得分:3)

发现错误。我试图在构造函数中初始化Shareable对象。那时客户端的register方法尚未调用,因此JCRE没有其AID。虽然我的服务器的getShareableInterfaceObject(AID clientaid,byte参数)方法不要求客户端的AID为!= null,但JCRE可能会这样做,因为它为我的客户端调用此方法。我现在在处理我的第一个APDU时初始化我的Shareable对象,现在它可以正常工作。