2012-08-28 73 views
2

這是一個難題!僅當簽署JAR時纔會出現ClassNotFoundException

我在JAR中有一個applet。當JAR簽名時 - 無論是自籤還是帶有DigiCert證書 - 我在主applet課程上獲得ClassNotFoundException。 當我沒有簽名的小程序,它加載得很好 - (由於代碼未被簽名,不包括預期的SecurityException)。

但我可以解壓簽名的JAR,並找到它應該在的位置。

最奇怪的部分是,直到上週設置工作得很好。 相同的主類,自簽名,JS/HTML相同的部署組合

有什麼想法?

以下是錯誤消息:

java.lang.ClassNotFoundException: com.spraklab.ilos.applet.Applet 
at sun.plugin2.applet.Applet2ClassLoader.findClass(Applet2ClassLoader.java:195) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Plugin2ClassLoader.java:249) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:179) 
at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Plugin2ClassLoader.java:160) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Plugin2ClassLoader.java:690) 
at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3045) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497) 
at java.lang.Thread.run(Thread.java:680) 
+0

聽起來像是,出於某種原因,簽名正在檢測出不好。你的證書是否過期? –

+0

不是。這是一個新的證書。在另一個applet上使用相同的簽名代碼,並且該代碼可以正常工作... –

+0

之後的一個工作日 - 我還沒有解決它。但是:我發現當在Chrome「隱身窗口」或Safari的「私人」模式下加載時,完全相同的URL/HTML/JAR/applet可以正常工作 - 但在常規窗口中失敗。有趣! –

回答

0

簡短版本: JAR名稱中沒有連字符!

戲劇性的故事: 終於!問題發現後的許多工作日。 該applet在未簽名時加載正常,簽名時出現ClassNotFoundException異常。 關於類加載器切換的答案讓我相信我的代碼中有些東西已經改變了。所以我把我的代碼剝離爲最小。 但爲了避免不得不重新啓動我的瀏覽器並清空緩存等,我只是使用Chrome的隱身模式。我重建了代碼。最後一切都很好。不! 當我在隱身之外對其進行測試時,我再次遇到了錯誤。

那有什麼區別?對服務器日誌的檢查表明,在普通模式下,Jar並沒有被服務器請求! 我再次將我的代碼與具有類似嵌入代碼的不同應用程序進行了比較,只看到一個區別:我在JAR名稱中使用了連字符而不是下劃線 - 應該允許使用該下劃線,直到2周前。 但是在2周前還沒有Java更新...?!?!

2

在上面的代碼中您要切換的安全小程序的類加載器。從Java 1.2開始,這是不允許的。

+0

可能是什麼原因造成的?我不知道我正在做什麼特別的事情來嘗試做到這一點...... –

相關問題