2016-02-17 93 views
4

我试图从样本目录下的Java Card SDK中标准的Wallet.java生成CAP文件和导出文件。我编译这个类,使用转换器,并遇到以下:Java Card Converter:版本50.0不受支持的类文件格式

$ javac -g -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java 
$ converter -debug -verbose -classdir "$JC_HOME/samples/src" com.sun.javacard.samples.wallet 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x6:0x1 1.0 

Java Card 2.2.2 Class File Converter, Version 1.3 
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. 

parsing /home/user/javacard/java_card_kit-2_2_2/samples/src/com/sun/javacard/samples/wallet/Wallet.class 
error: com.sun.javacard.samples.wallet.Wallet: unsupported class file format of version 50.0. 

conversion completed with 1 errors and 0 warnings. 

我的Java版本和javac版本是相同的,Java 1.6的:

$ java -version 
java version "1.6.0_45" 
Java(TM) SE Runtime Environment (build 1.6.0_45-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 
$ javac -version 
javac 1.6.0_45 

我使用JC SDK 2.2.2在Ubuntu 14.04。该转换器的版本是1.3:

$ converter -version 
Java Card 2.2.2 Class File Converter, Version 1.3 
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. 

我似乎无法来解决这个错误“的版本50.0的不支持的类文件格式”。我有些困惑,为什么我在Java 1.6版本50.0中遇到这个错误。

是否有其他人遇到同样的问题?

+2

您必须使用'Java 1.3'来将'.java'文件编译为'.class'文件。因为JCDK2.2.2转换器仅支持Java 1.3生成的'class'文件。 – Abraham

+0

@Abraham,谢谢。我会试试这个。 – cmanning

回答

4

Java Card 2.2.2转换器最多支持Java 5类文件格式(因此它会告诉您Java 6 /版本50.0是而不是支持)。因此,你需要指定源兼容性/ class文件版本使用较新的JDK版本编译源代码时:

javac -g -source 1.5 -target 1.5 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java 

同样,对于Java卡2.2.1,你可以使用1.2版本:

javac -g -source 1.2 -target 1.2 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java 

和Java卡2.1.1(JC SDK 2.1.2),你可以使用1.1版本:

javac -g -source 1.1 -target 1.1 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java 

可以检查类Fi的版本乐与Java类文件反汇编(感谢@cmanning为提这一点):

javap -v -cp classes/ com.sun.javacard.samples.wallet.Wallet |grep 'version' 
+0

谢谢,我已经试过了,我仍然遇到同样的结果。具有指定的源和目标的javac命令的结果仍会生成版本为50.0格式的类文件。我通过使用以下命令进行检查:javap -verbose src.com.sun.javacard.samples.wallet.Wallet | grep版本' – cmanning

+0

@cmanning这很奇怪。这适用于Windows 7上的Oracle JDK 8(1.8.0_60)以及Ubuntu 14.04.3 LTS上的Oracle JDK 6(1.6.0_30)。 –

+1

我认为我的Ubuntu VM有问题。我创建了一个新的虚拟机,并能够通过javac源代码和目标代码来控制主要版本。我想我现在走在正确的轨道上。谢谢你的帮助。 – cmanning

2

你可能要考虑ant-javacard,做这样的事情(如根据JC SDK版本编译器选项)自动的。 (免责声明:我做到了)

相关问题