2012-07-19 99 views
0

我曾經在一個HTML頁面下面的代碼類在我的JAR文件未找到

 <applet code="com.griaule.fingerprintsdk.appletsample.FormMain" 
      archive="SignedFingerprintSDKJava.jar, AbrirAplicativoAssinado.jar" 
      width="515" height="560"> 
     </applet> 

當我運行我的HTML頁面,一個得到一個錯誤,說,"ClassNotFoundException, FormMain.class"

我跑jarscan和我在我的jar文件中找到FormMain類。

發生了什麼事?

這是我生成我的jar文件

jar cvf C:\Users\lucas\desktop\AbrirAplicativo.jar C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\AppletInstaller.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\ColorPane.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\FormMain.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\FormOptions.class C:\Users\lucas\workspace\applet-chave\bin\com\griaule\fingerprintsdk\appletsample\Util.class 

生成密鑰

keytool -genkey -dname "cn=AbrirAplicativoApplet, ou=XXX, o=XXX, l=São Paulo, s=SP c=BR" -alias AbrirAplicativoAppletKey -keystore C:\ChaveAbrirAplicativoApplet -storepass 123456 -validity 7300 

分配JAR文件

jarsigner -keystore C:\users\lucas\desktop\ChaveAbrirAplicativoApplet -storepass 123456 -signedjar "C:\Users\lucas\Desktop\AbrirAplicativoAssinado.jar" "C:\Users\lucas\Desktop\AbrirAplicativo.jar" AbrirAplicativoAppletKey 

導出證書

keytool -export -keystore C:\users\lucas\desktop\ChaveAbrirAplicativoApplet -alias AbrirAplicativoAppletKey -file C:\users\lucas\desktop\CertificadoAbrirAplicativoApplet.x509 

驗證分配

keytool -import -alias AbrirAplicativoAppletKey -file C:\CHAVES\CertificadoAbrirAplicativoApplet.x509 

也許我的問題是在PolicyTool

當我試圖把一個新的策略項,我得到了下面的錯誤

java.net.MalformedURLException: no protocol: AbrirAplicativoAssinado.jar 

但我怎麼能把一個URL在這個領域,如果我的jar文件在我的桌面?

我試圖把http://localhost/AbrirAplicativoAssinado.jar但出現新的錯誤

There is not a public key for the alias AbrirAplicativoAppletKey. 
+0

複製/粘貼'jar -tvf the.jar'的結果,其中'the.jar'是該類所在的Jar。我同意這與簽署無關。保存一些空間並編輯該信息。出。 – 2012-07-20 00:39:41

+0

可以成爲我的清單? – 2012-07-20 13:08:35

+0

你的清單可以是什麼?越多越好,因爲我不喜歡玩'20個問題'。 – 2012-07-21 01:17:56

回答

1

確定「未找到的類」應該與簽名無關。我認爲jar文件與html文件位於同一個目錄中?

列出多個存檔的方式可能存在問題。您可以嘗試以下方法:

  • 從檔案列表中省略,,只留下空間。
  • ,(包括空格)替換爲:;
  • 創建一個僅包含清單的jar文件,並在該清單中添加一個Class-Path屬性,其中列出了另一個由空格分隔的兩個存檔。使用該文件作爲archive=參數。
  • 修改其中一個jar文件以引用其清單中Class-Path屬性中的另一個,並僅在archive=參數中列出其中一個。

它也像你建立yor jar文件的方式一樣,所有的class文件都放在文件的根目錄下,沒有內部目錄結構。 jar文件中的目錄結構必須與您的類的包結構匹配,即源代碼中的package行以及applet標記的code=參數。

爲了在您的jar文件中創建目錄結構,將目錄更改爲C:\Users\lucas\workspace\applet-chave\bin,然後執行jar cvf C:\Users\lucas\desktop\AbrirAplicativo.jar com將整個目錄com添加到存檔。

+0

如果我在我的代碼屬性中放入我的標記Applet,只是FormMain,會發生Exception NoClassDefFoundError,FormMain(錯誤名稱:com/griaule/fingerprintsdk/appletsample/FormMain)。我把所有創建的文件放在同一個目錄中 – 2012-07-19 14:22:35

+0

好了,異常意味着現在java插件能夠直接在jar中打開'FormMain.class'文件,但是會拒絕加載它,因爲文件聲明它應該屬於它而不是「com ... sample」包。因此,將html恢復到之前的狀態,並創建一個具有目錄結構的jar。 – MvG 2012-07-19 14:30:27

+0

但是Jar命令,我只能運行java/jdk1.7.0_05/bin目錄,在那裏我可以找到jar命令。當我在這個direcotrt之外執行時,出現'jar'不被識別爲實習生命令的錯誤 – 2012-07-19 14:42:53

0

你就是.html頁上的某個地方指定FormMain時,你應該指定爲com.griaule.fingerprintsdk.appletsample.FormMain

所有你擺在那簽字的東西你問題與ClassNotFoundException非常無關。

我不確定您是否正確構建了.jar,它可能包括您的用戶路徑以及.jar中的Eclipse工作目錄。最好花時間設置Maven來構建.jar,或者至少使用Eclipse中內置的工具導出.jar,這樣可以確保它正在正確構建。手工操作對各種錯誤都是開放的。

+0

在我的html頁面中,只是html body和標籤applet。我的標籤小程序就像我所說的,code =「com.griaule.fingerprintsdk.appletsample.FormMain」。這只是一個簡單的HTML頁面來測試我的小程序。 – 2012-07-19 14:03:54

+0

在Eclipse中應該導出爲JAR文件? – 2012-07-19 14:45:24

相關問題