【问题标题】:JavaCard simple applet not displaying textJavaCard 简单小程序不显示文本
【发布时间】:2017-03-01 18:17:13
【问题描述】:

我有以下问题:

在网上找到了很多简单的例子,但没有成功。

问题是:我的菜单项出现在 STK 菜单中,但如果我选择它,则什么也没有发生。我试图在事件 EVENT_MENU_SELECTION 上显示文本。

package helloStk;

import javacard.framework.*;
import sim.access.*;
import sim.toolkit.*;

public class helloStk extends Applet 
  implements ToolkitConstants, ToolkitInterface
{
  private static final byte CMD_QUALIFIER = (byte)0x80;

  private byte[] menuEntry = {'M','y','M','e','n','u'};
  private byte[] textBuf = {'H','e','l','l','o'};

  private ToolkitRegistry reg;
  private SIMView gsmFile;

  public helloStk() {
    //Get the GSM application reference
    gsmFile = SIMSystem.getTheSIMView();
    enter code here`enter code here`
    reg = ToolkitRegistry.getEntry();

    reg.initMenuEntry(menuEntry,
                      (short) 0, 
                      (short) menuEntry.length,
                      PRO_CMD_DISPLAY_TEXT,
                      false,
                      (byte) 0,
                      (short) 0);
  }

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

    helloStk dt = new helloStk();
    dt.register();
  }

  public void processToolkit(byte event)
    throws ToolkitException
  {
    ProactiveHandler ph = ProactiveHandler.getTheHandler();

    if (event == EVENT_MENU_SELECTION) {


       ph.init((byte) PRO_CMD_DISPLAY_TEXT, (byte) CMD_QUALIFIER, DEV_ID_DISPLAY);
       ph.appendTLV((byte)(TAG_TEXT_STRING | TAG_SET_CR),
                    textBuf,
                    (short) 0, 
                    (short) textBuf.length);
      ph.send();
    }
  }


  public void process(APDU apdu) {
    if (selectingApplet()) {
      return;
    }
  }

}

【问题讨论】:

  • 你能试试reg.initMenuEntry(..., PRO_CMD_SELECT_ITEM, ...)而不是reg.initMenuEntry(..., PRO_CMD_DISPLAY_TEXT, ...)吗?
  • 好的,先生,让我试试。谢谢
  • hi @vojta 遇到同样的错误:安装小程序失败安装(用于安装)响应检查失败,SW 6F 00
  • 您应该尝试注释掉构造函数中的行,看看是哪一行导致了异常...
  • Vojta,当我评论这一行时,应用程序安装成功。但我想要一个菜单​​,这就是我需要初始化它的原因。 reg.initMenuEntry(menuEntry, (short) 0, (short) menuEntry.length, PRO_CMD_DISPLAY_TEXT, false, (byte) 0, (short) 0);

标签: javacard


【解决方案1】:

您应该首先调用 Applet 实例的 register() 方法,然后检索 ToolkitRegistry 条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多