Java卡转换器:类不属于包\

Java卡转换器:类不属于包\,java,smartcard,javacard,Java,Smartcard,Javacard,我正在创建一个非常简单的Java卡小程序(版本2.2.2),但我对Java卡还不熟悉,我不知道如何将.class文件转换为.cap文件。我正在使用converter.bat文件 我已经设法用eclipse将单个.java文件编译成.class 我尝试将我的小程序移动到默认包,并从代码顶部删除该包 我试着用谷歌搜索这个问题,但没有成功 我尝试使用命令行编译代码,并带有-target和-source兼容选项 我遵循本教程,但没有成功: 当我跑步时: .\converter.bat -applet 0

我正在创建一个非常简单的Java卡小程序(版本2.2.2),但我对Java卡还不熟悉,我不知道如何将.class文件转换为.cap文件。我正在使用converter.bat文件

我已经设法用eclipse将单个.java文件编译成.class

我尝试将我的小程序移动到默认包,并从代码顶部删除该包

我试着用谷歌搜索这个问题,但没有成功

我尝试使用命令行编译代码,并带有-target和-source兼容选项

我遵循本教程,但没有成功:

当我跑步时:

.\converter.bat -applet 0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x00:0x00 Token -classdir .\Token\ -exportpath %JC_HOME%\api_export_files \ 0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x00 1.0
它向我抛出一条错误消息:
错误:类令牌不属于包\。

我的java小程序:

import javacard.framework.*;

public class Token extends Applet {
    /* constants declaration */
    // code of CLA byte in the command APDU header
    final static byte Amblar_CLA =(byte)0xb0;

    // codes of INS byte in the command APDU header
    final static byte SET_TOKEN = (byte) 0x30;
    final static byte GET_TOKEN = (byte) 0x40;

    private short token;

    /**
     * Installs this applet.
     * 
     * @param bArray
     *            the array containing installation parameters
     * @param bOffset
     *            the starting offset in bArray
     * @param bLength
     *            the length in bytes of the parameter data in bArray
     */
    public static void install(byte[] bArray, short bOffset, byte bLength) {
        new Token(bArray, bOffset, bLength);
    }

    /**
     * Only this class's install method should create the applet object.
     */
    private Token(byte[] bArray, short bOffset, byte bLength) {
        token = 0x00;
        register();
    }

    public boolean select() {
        return true;
    }

    public void process(APDU apdu) {
         byte[] buffer = apdu.getBuffer();

        if ((buffer[ISO7816.OFFSET_CLA] == 0) && (buffer[ISO7816.OFFSET_INS] == (byte)(0xa4)))
            return;

        if (buffer[ISO7816.OFFSET_CLA] != Amblar_CLA)
          ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);

        switch (buffer[ISO7816.OFFSET_INS]) {
            case SET_TOKEN: 
                setToken(apdu);
                break;
            case GET_TOKEN: 
                getToken(apdu);
                break;
            default: ISOException.throwIt (ISO7816.SW_INS_NOT_SUPPORTED);
        }
    }

    private void setToken(APDU apdu) {
        byte[] buffer = apdu.getBuffer();

        byte byteRead = (byte)(apdu.setIncomingAndReceive());

        if (byteRead != 1)
            ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);

        byte newToken = buffer[ISO7816.OFFSET_CDATA];

        token = (short)newToken;
    }

    private void getToken(APDU apdu) {
        byte[] buffer = apdu.getBuffer();

        short le = apdu.setOutgoing();

        if ( le < 2 ) ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);

        apdu.setOutgoingLength((byte)2);
        buffer[0] = (byte)(token >> 8);
        buffer[1] = (byte)(token & 0xff);
        apdu.sendBytes((short)0, (short)2);
    }
}
导入javacard.framework.*;
公共类令牌扩展Applet{
/*常数声明*/
//命令APDU头中CLA字节的代码
最终静态字节Amblar_CLA=(字节)0xb0;
//命令APDU头中INS字节的代码
最终静态字节集_标记=(字节)0x30;
最终静态字节GET_TOKEN=(字节)0x40;
私人短令牌;
/**
*安装此小程序。
* 
*@param bArray
*包含安装参数的数组
*@param-bOffset
*bArray中的起始偏移量
*@param bLength
*bArray中参数数据的字节长度
*/
公共静态无效安装(字节[]bArray,短bOffset,字节bLength){
新令牌(bArray、bOffset、bLength);
}
/**
*只有此类的安装方法才能创建小程序对象。
*/
专用令牌(字节[]bArray,短bOffset,字节bLength){
令牌=0x00;
寄存器();
}
公共布尔选择(){
返回true;
}
公共作废流程(APDU APDU){
byte[]buffer=apdu.getBuffer();
如果((缓冲区[ISO7816.OFFSET\u CLA]==0)和&(缓冲区[ISO7816.OFFSET\u INS]==(字节)(0xa4)))
返回;
if(缓冲区[ISO7816.偏移量分类]!=Amblar分类)
ISOException.throwIt(不支持ISO7816.SW_CLA_);
开关(缓冲区[ISO7816.OFFSET_INS]){
案例集\u令牌:
setToken(apdu);
打破
案例获取令牌:
getToken(apdu);
打破
默认值:ISOException.throwIt(不支持ISO7816.SW_-INS_);
}
}
私有void setToken(APDU APDU){
byte[]buffer=apdu.getBuffer();
byte byteRead=(byte)(apdu.setIncomingAndReceive());
if(byteRead!=1)
等异常。throwIt(ISO7816。SW_错误长度);
字节newToken=buffer[ISO7816.OFFSET\U CDATA];
token=(短)newToken;
}
私有void getToken(APDU APDU){
byte[]buffer=apdu.getBuffer();
short le=apdu.setOutgoing();
if(le<2)等异常throwIt(ISO7816.SW_错误长度);
apdu.setOutgoingLength((字节)2);
缓冲区[0]=(字节)(令牌>>8);
缓冲区[1]=(字节)(令牌和0xff);
apdu.sendBytes((短)0,(短)2);
}
}

您只需在Java源文件中添加一个包声明(正如您一直应该做的那样,不要忽略默认的包警告)

例如:

package com.myname.javacard.test;
那就行了

Java卡小程序是加载模块的一部分,加载模块基本上由普通Java包组成。此包装/装载模块也将分配AID(转换器中的十六进制代码)。但是,如果使用默认包,这是不可能的,如果没有包声明,则使用默认包


此外,必须确保正确找到类文件。确保它们位于文件夹
\Token
下。您可能只需要从类目录(它是一个目录,而不是
.class
文件)中删除
\Token
,或者删除整个
-classdir

如果不确定,请在引号或双引号内指定文件夹的完整路径