如何在Java Card小程序中使用可共享的界面?

时间:2015-03-29 11:57:17

标签: java javacard

我为我的java卡写了两个名为 App1 App2 的简单applet,如下所示:

App1:

public class App1 extends Applet {

    private App1() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new App1().register();
    }

    public void process(APDU arg0) throws ISOException {
    if(selectingApplet()){
        return;
    }
     //I want to call "ThisMethod()" of App2 here


    }

}

App2:

public class App2 extends Applet {

    private App2() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {
        new App2().register();
    }

    public void process(APDU arg0) throws ISOException {

    }

    public void ThisMethod(){
        ISOException.throwIt((short)0x9001);
    }

}

正如我在App1程序中指出的那样(作为评论)我想在App1的ThisMethod方法中调用App2的Process方法。据我所知,我必须实现Shareable接口。但我对它有点困惑:

问题:

1-我必须在两个小程序中实现此方法吗?或者我需要在App1或App2中实现它?

2-如果App1和App2在一个软件包中或两个单独的软件包中,是不是有任何改变?

3-我需要Shareable接口来共享阵列吗?或者仅仅是为了共享方法?

1 个答案:

答案 0 :(得分:2)

  1. 不,您只需创建一个扩展可共享的接口,然后您的app2必须实现该接口。

  2. 没关系。

  3. 是的,如果你想分享你的数组,你还需要实施Shareable

  4. 但是,在使用从其他applet实例共享的方法/对象之前,必须先在App1中存储接口实例。你可以通过

    来做到这一点
    AID aid = JCSystem.lookupAid({App2 AID byte array}, {offset}, {length});  // provide the instance AID of App2
    
    {yourInterface} app2Instance = ({yourInterface})JCSystem.getAppletShareableInterfaceObject(aid, (byte)0);
    

    然后使用app2Instance访问共享方法/对象