我为我的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;
但没有改变。
我的课程有什么问题?
答案 0 :(得分:2)
安装te applet时会调用install方法
当您(选择第一个并且)将命令发送到实例化/安装的小程序时,将调用该过程方法
这意味着首先调用install方法,因此:
您想要写入未初始化数组的第一个错误(theArray == null)
你的第二个错误是Util.arrayCopyNonAtomic的错误参数(注意安装方法移交的offsetParameter)