【发布时间】: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