Java “如何发送”;安装";使用“";过程“;方法?

Java “如何发送”;安装";使用“";过程“;方法?,java,javacard,Java,Javacard,我为java卡编写了一个小程序,我想将install方法的参数发送到CAD。因此,我在applet中定义了两个名为array和arrayLength的静态变量。之后,我在该方法的主体中复制了install方法参数。最后,我尝试使用过程方法将这些变量返回给CAD。但是在SELECT命令的响应中,卡返回SW=6F00 package bArrayAccessibilty; import javacard.framework.APDU; import javacard.framework.Apple

我为java卡编写了一个小程序,我想将
install
方法的参数发送到CAD。因此,我在applet中定义了两个名为array和arrayLength的静态变量。之后,我在该方法的主体中复制了
install
方法参数。最后,我尝试使用
过程
方法将这些变量返回给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;
但一切都没有改变


我的程序出了什么问题?

安装te小程序时会调用安装方法。
当您(选择first并)向实例化/安装的小程序发送命令时,将调用process方法。
这意味着安装方法将首先被调用,因此:
第一个错误是要写入未初始化数组的tat(数组==null)

您的第二个错误是Util.arrayCopyNonAtomic的参数错误(注意安装方法移交的offsetParameter)

谢谢亲爱的Paul。它有什么解决方案吗?在初始化字节数组之前,请阅读Util.arrayCopyNonAtomic()的JC规范。我用
{(byte)0xff,(byte)0xff,(byte)0xff,(byte)0xff,…}
初始化了静态字段
数组,我的问题就解决了。谢谢:)但我不明白这是为什么。为什么我们必须初始化字节数组?据我所知,静态字段在声明时自动初始化为
0x00
。字节数组只是一个指针,如果不初始化数组,它就不会指向任何地方。您还可以使用数组=新字节[长度]
进行初始化。声明只声明具有变量名的对象,默认情况下,short等simpe对象可能会初始化,但字节数组指针不会初始化(因为编译器无法猜到数组长度,例如),这是否仅适用于java卡,在方法中使用静态变量之前,我需要初始化静态变量(原因是源代码限制。即,我必须在安装时分配内存,以防止运行时出错)?或者在java程序中我也必须这样做?