如何使用“process”方法向读卡器发送“install”方法参数?

时间:2015-02-15 06:01:19

标签: java javacard

我为我的Java卡写了一个小程序,我想将install方法的参数发送给CAD。所以我在applet中定义了两个名为 theArray arrayLength 静态变量。之后,我在该方法体内复制了install方法参数。最后,我尝试在process方法中将这些变量返回给CAD。但在SELECT命令的响应中,该卡返回SW=6F00

package bArrayAccessibilty;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacard.framework.Util;

public class BArrayReturner extends Applet {

    public static byte[] theArray;
    public static short arrayLength;

    private BArrayReturner() {
    }

    public static void install(byte bArray[], short bOffset, byte bLength)
            throws ISOException {

        new BArrayReturner().register();
        BArrayReturner.arrayLength=(short)bArray.length;
        Util.arrayCopyNonAtomic(bArray, (short)0,BArrayReturner.theArray , (short) 0, BArrayReturner.arrayLength);    


    }

    public void process(APDU apdu) throws ISOException {
        byte[] buffer=apdu.getBuffer();
        Util.arrayCopyNonAtomic(BArrayReturner.theArray, (short)0,buffer , (short) 0, BArrayReturner.arrayLength); 
        apdu.setOutgoingAndSend((short)0, (short)255);
    }

请注意,静态字段的初始化不会改变任何内容 我的意思是,我也在课堂上试过这句话:

public static byte[] theArray=null;
public static short arrayLength=0;

但没有改变。

我的课程有什么问题?

1 个答案:

答案 0 :(得分:2)

安装te applet时会调用install方法 当您(选择第一个并且)将命令发送到实例化/安装的小程序时,将调用该过程方法 这意味着首先调用install方法,因此: 您想要写入未初始化数组的第一个错误(theArray == null)
你的第二个错误是Util.arrayCopyNonAtomic的错误参数(注意安装方法移交的offsetParameter)