Java Web Start - 运行时ClassNotFoundException

时间:2011-07-07 14:49:37

标签: java deployment jnlp java-web-start classnotfoundexception

我现在正尝试使用Java Web Start部署Java应用程序。独立运行时应用程序运行正常。我将项目导出为可运行的.jar文件,然后编写相应的jnlp文件。

但是,从jnlp文件运行时,应用程序在启动时会返回以下错误:

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

我使用Eclipse Helios导出了.jar文件,其中包含“将所需库打包到生成的JAR中”选项。

这是我的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来托管文件,但我怀疑这会有什么不同。

有人可以帮助我吗?

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

来自WebStart Developer's Guide

  

必须从JNLP文件的resources部分中指定的JAR文件中检索所有应用程序资源,或者使用对Web服务器的HTTP请求显式检索所有应用程序资源。建议在JAR文件中存储资源,因为它们将由Java Web Start缓存在本地计算机上。

因此,类加载器机制对于WebStart应用程序是不同的。我认为这是打包选项“将所需的库打包到生成的JAR中”会导致问题。

someClass包含在signed.jar文件中的jar中吗?如果是这样,这将支持这个理论 - 尝试生成单独的jar文件(不要忘记全部签名!)并在<resources>部分中将它们作为单独的<jar>条目引用。