2016-02-17 99 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版本編譯器選項)自動的。 (免責聲明:我做到了)

相關問題