Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java卡转换器:不支持50.0版的类文件格式_Java_Applet_Converter_Javacard_Java 6 - Fatal编程技术网

Java卡转换器:不支持50.0版的类文件格式

Java卡转换器:不支持50.0版的类文件格式,java,applet,converter,javacard,java-6,Java,Applet,Converter,Javacard,Java 6,我正在尝试从Wallet.java生成一个CAP文件和一个导出文件,该文件在samples目录下的java Card SDK中是标准的。我编译该类,使用转换器并遇到以下问题: $ javac -g -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java $ converter -debug -verbose -classdir "$JC_HOME/samples/src" com.sun.javacard.samples.walle

我正在尝试从Wallet.java生成一个CAP文件和一个导出文件,该文件在samples目录下的java Card SDK中是标准的。我编译该类,使用转换器并遇到以下问题:

$ 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
我在Ubuntu 14.04上使用JC SDK 2.2.2。转换器的版本为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版不支持的类文件格式”错误。考虑到Java1.6是版本50.0,我对为什么会遇到这个错误有点困惑


还有其他人遇到过同样的问题吗?

Java Card 2.2.2转换器最多支持Java 5类文件格式(因此它告诉您Java 6/version 50.0不受支持)。因此,在使用较新的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
您可以使用Java类文件反汇编程序检查类文件的版本(感谢您提到这一点):

javap-v-cp classes/com.sun.javacard.samples.wallet.wallet | grep“版本”

您可能希望研究自动执行这些操作(如编译器标志,取决于JC SDK版本)的方法。(免责声明:我做到了)

您必须使用
Java1.3
.Java
文件编译为
.class
文件。因为JCDK2.2.2转换器只支持Java 1.3生成的
class
文件。@Abraham,谢谢。我会试试这个。谢谢,我已经试过了,我仍然会遇到同样的结果。指定了源和目标的javac命令的结果仍然生成一个版本为50.0格式的类文件。我使用下面的命令进行了检查
javap-verbose src.com.sun.javacard.samples.wallet.wallet | grep version
@cmanning这很奇怪。在Windows7上使用OracleJDK8(1.8.0_60)和在Ubuntu14.04.3LTS上使用OracleJDK6(1.6.0_30)时,这对我来说都很好。我认为我的UbuntuVM有问题。我创建了一个新的VM,并且能够通过javac源和目标标记控制主版本。我想我现在走对了方向。感谢您的帮助。亲爱的Michael,我收到了
javac:invalid source release:1.1
错误,原因是
-source 1.1-target 1.1
。为什么?(其他版本运行良好)。@Abraham似乎认为在Java7和Java8中不再提供被贬低的1.1。我还没有对此进行测试,但在这种情况下,使用
-source 1.2-target 1.1
应该可以正常工作。