2011-07-07 110 views
1

我正在嘗試使用Java Web Start部署Java應用程序。獨立運行時,應用程序正常工作。我將項目導出爲可運行的.jar文件,然後編寫相應的jnlp文件。Java Web Start - 運行時出現ClassNotFoundException

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: someClass 
........ 
Caused by: java.lang.ClassNotFoundException: someClass 
......... 

我出口使用Eclipse赫利俄斯的選項「包所需的庫到生成JAR」 .jar文件:

然而,從JNLP文件中運行時,應用程序啓動時返回以下錯誤。

這裏就是我的JNLP文件的樣子(我取代了一些資料):

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" 
    codebase="................" 
    href="thisJNLP.jnlp"> 
    <information> 
     <title>Whatever</title> 
     <vendor>Whatever</vendor> 
    </information> 
    <security> 
     <all-permissions/> 
    </security> 

    <resources> 
     <!-- Application Resources --> 
     <j2se version="1.6+" 
       href="http://java.sun.com/products/autodl/j2se"/> 
     <jar href="signed.jar" main="true" /> 

    </resources> 
    <application-desc 
     name="Whatever" 
     main-class="thisProject.main" 
     width="300" 
     height="300"> 
    </application-desc> 
    <update check="background"/> 
</jnlp> 

另外,我使用的WebLogic 10到主機上的文件,但我懷疑,這將使任何區別。

有人可以幫我嗎?

感謝您的任何意見!

+0

所以你試過完全相同的jar獨立,即從命令行啓動它?確保所有必需的類都在JAR中? – Thomas

+0

@Thomas是的,獨立時運行良好。 –

回答

1

WebStart Developer's Guide

所有應用程序資源必須從JNLP文件的資源節中指定的JAR文件進行檢索,或使用一個HTTP請求發送到Web服務器檢索明確。建議將資源存儲在JAR文件中,因爲它們將通過Java Web Start緩存在本地計算機上。

因此,WebStart應用程序的類加載器機制不同。我認爲這是包裝選項「將所需庫包裝到生成的JAR中」,這會導致您的案例出現問題。

請問signed.jar文件中是否包含類someClass?如果是這樣,這將支持這個理論 - 嘗試生成單獨的jar文件(不要忘記將它們全部簽名!),並將<resources>部分中的每個文件作爲單獨的<jar>條目引用。

+0

感謝您的回答!我認爲這應該是原因,我會檢查... p.s.對編輯抱歉,我只是拿出我的程序的信息,我忘記刪除。 –