Java 在带有jnlp文件的小程序中加载惰性jar时不能工作的原因可能是什么?

Java 在带有jnlp文件的小程序中加载惰性jar时不能工作的原因可能是什么?,java,jar,applet,jnlp,next-generation-plugin,Java,Jar,Applet,Jnlp,Next Generation Plugin,我在http页面中嵌入了小程序。小程序已经签名(和我正在使用的所有JAR一样),并且它使用了新的java插件,该插件允许在带有jnlp的网页中嵌入小程序。 我想延迟加载applet所需的一个jar文件,但无法使其工作 这是我的jnlp文件: <?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" href="/GUI.jnlp"> <information> <title&

我在http页面中嵌入了小程序。小程序已经签名(和我正在使用的所有JAR一样),并且它使用了新的java插件,该插件允许在带有jnlp的网页中嵌入小程序。 我想延迟加载applet所需的一个jar文件,但无法使其工作

这是我的jnlp文件:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" href="/GUI.jnlp">
    <information>
        <title>My Applet</title>
        <vendor>My Company</vendor>
    </information>
    <resources>
        <j2se href="http://java.sun.com/products/autodl/j2se" version="1.6+"/>   
        <jar href="/mainGUI.jar" main="true"/>
        <jar href="/external_1.jar"/>
        <jar href="/external_2.jar"/>
        <jar href="/external_3.jar" download="lazy"/>
    </resources>
    <applet-desc
         name="My Applet"
         main-class="com.xformation.GUIAppletMain"
         width="800"
         height="600">
    </applet-desc>
</jnlp>
我觉得很可疑的是:

at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)

那么,看起来所有的延迟下载都被忽略了?问题是为什么?

您可能缺少codebase属性:

<jnlp
  spec="6.0+"
  codebase="http://my_company.com/jaws/apps"
  href="swingset2.jnlp">


请参阅此处:

好的,我找到了答案

看完 我注意到这句话:

  868   // We will eagerly download all lazy resources that have already been cached too.
  869   // Otherwise, we might not detect that an update have happend
嗯,我确信我的缓存被清除了,因为在我的开发人员机器上,我完全禁用了它。出于好奇,我再次启用了它,并尝试运行我的小程序

现在它可以工作了


所以:注意,延迟加载在禁用缓存的情况下不起作用

我也尝试使用codebase,效果完全相同。然后我在某个地方读到,如果小程序带有jnlp代码库,则不需要它,因为它始终与小程序的位置相同。有没有办法从浏览器的Java控制台查看某种错误日志文件?1)外部_3.jar中(大概)有哪些资源?2) 它们是如何被引用的?3) 什么时候和通过什么引用它们?4) 为什么3个外部jar被索引,而不是
mainGUI.jar
?5) 所有
href
属性都指向位于站点根目录下的资源。外部JAR 1和2是SwingX库和JFreeChart库,它们都直接在小程序中用于构建gui。外部JAR3是axis库,用于在用户单击按钮后发出一些soap请求。ant构建中没有直接引用mainGUI,因为$(dist.jar)正好是mainGUI.jar(因此它是构建的主题)。但是mainGUI.jar中的所有文件都列在索引文件中。所有jar文件都在根目录中,是的。“External jar 3是在用户单击按钮后用于发出一些soap请求的axis库。”更具体地说,该按钮的
actionPerformed
方法中使用的实际代码是什么?有很多方法可以调用一个懒惰的Jar来急切地加载,我想知道你是否做过这些事情中的任何一件。我理解你的意思,但这不能成为一个理由。可以从axis库调用任何东西的代码只在mainGUI.jar中,出于某种原因,mainGUI.jar加载在axis.jar之后。据我所知,如果mainGUI.jar被标记为“main”jar,这种情况就不会发生。你搜索过bug数据库吗?也许这是个新问题,我也有同样的问题。当你说“缓存已禁用”时,你指的是你的浏览器还是你的操作系统?如果是操作系统,如何更改?如果使用windows,请参阅以下说明:
java.io.FileNotFoundException: http://192.168.22.124:6500/axis.jar?version-id=1.0
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getJarFileWithoutCache(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getJarFileWithoutCache(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
at com.sun.deploy.net.DownloadEngine.getCachedJarFile(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.downloadResources(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at com.sun.javaws.LaunchDownload.downloadEagerorAll(Unknown Source)
<jnlp
  spec="6.0+"
  codebase="http://my_company.com/jaws/apps"
  href="swingset2.jnlp">
  868   // We will eagerly download all lazy resources that have already been cached too.
  869   // Otherwise, we might not detect that an update have happend