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