如何使用 "process" 方法将 "install" 方法参数发送到卡片 reader?

How to send "install" method arguments to the card reader using "process" method?

我为我的 java 卡写了一个小程序,我想将 install 方法的参数发送到 CAD。所以我在我的小程序中定义了两个名为 theArrayarrayLengthstatic 变量。之后,我在该方法的主体内复制了 install 方法参数。最后我尝试在 process 方法中将此变量 return 转换为 CAD。但是在 SELECT 命令的响应中,卡 returns 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);
    }

请注意,静态字段的初始化不会改变任何内容。
我的意思是,我也在 class 正文中尝试了这一行:

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

但没有任何改变。

我的程序有什么问题?

安装小程序时会调用安装方法。
当您(select 首先)向 instantiated/installed 小程序发送命令时,将调用 process 方法。
这意味着安装方法将首先被调用,因此:
你的第一个错误是你想写入一个未初始化的数组(theArray == null)
你的第二个错误是Util.arrayCopyNonAtomic的错误参数(注意安装方法传递的offsetParameter)