我在一个包Applet1
中编写了两个不同的项目Java Card 2.2.2 applet firstApplet
,在包Applet2
中编写了另一个applet secondApplet
。
我想在第二个applet中使用第一个applet的一些功能。
所以在Applet2
中,在将第一个项目添加到第二个项目的Java Build Path之后,它看起来像:
package secondApplet;
import javacard.framework.APDU;
...
import firstApplet.Applet1;
public class Applet2 extends Applet {
...
}
首先,使用Java Card工具converter
我使用此命令获得.exp
文件:
converter -out EXP -exportpath ..\api_export_files -applet AID Applet1 -classdir ..\..\ ... \Applet1\bin firstApplet PID 1.1
其中AID
是小程序ID,PID
是包ID。它给了我firstApplet.exp
没有错误。
此命令的输出为:
parsing C:\ ... \bin\firstApplet\Applet1.class
converting firstApplet.Applet1
writing C:\ ... \bin\firstApplet\javacard\firstApplet.exp
但是,当我尝试获取Applet2
的CAP文件时,它会返回错误:
error : secondApplet.Applet2: class firstApplet.Applet1 not found in export file firstApplet.exp.
我真的不知道出了什么问题,我认为.exp生成得很好,我错过了什么?
答案 0 :(得分:1)
晚了1.5年但仍然有趣的问题。这是我的答案:这是设计的。 如果您的CAP文件中有applet,则导出将不包含公共类(Javacard虚拟机规范,版本3.0.1,第6.12节“导出组件” - 最后一段。)因此,为了做您想做的事情,您需要从Applet1创建一个库包。理论上,您可以在为Applet1创建CAP文件时通过 not 指定applet来实现。这将有两个问题:首先转换器不会让你创建这样“格式错误”的文件,其次你将无法实例化Applet1。
如果你只是想让Applet2像Applet1一样拥有樱桃,最好的方法是将Applet1的机制放到一个抽象类中 - 在另一个包中 - 让Applet1和Applet2都扩展这个抽象类。