编辑2:发现错误。我尝试在构造函数中初始化 Shareable 对象。此时客户端的register方法还没有被调用,所以JCRE没有它的AID。虽然我的服务器的 getShareableInterfaceObject(AID clientaid, byte parameter) 方法不要求客户端的 AID 为 != null,但 JCRE 可能会这样做,因为它为我的客户端调用此方法。现在,当我处理第一个 APDU 时,我会初始化我的 Shareable 对象,并且它现在可以工作了。
顺便说一句,谢谢 owlstead 帮助我格式化我的帖子。绝对让它更容易阅读!
我是 Java Card 开发新手,无法理解Shareable
接口来工作。
我有一个接口类,声明了我的客户端小程序想要使用的函数。我的服务器小程序实现了这个类。我的客户端小程序查找 AID 并尝试通过调用获取接口getAppletShareableInterface()
。但这总是返回null
.
我的服务器小程序getShareableInterface()
仅由return this;
,所以我猜问题出在其他地方。但我不知道在哪里。
我正在使用 JCWDE 并逐步执行代码,我看到我的服务器小程序调用寄存器,因此客户端小程序应该能够找到它。谁能给我一些指示,可能出了什么问题?
edit:
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,就好像服务器小程序不存在一样。