Java 在带有jnlp文件的小程序中加载惰性jar时不能工作的原因可能是什么?
我在http页面中嵌入了小程序。小程序已经签名(和我正在使用的所有JAR一样),并且它使用了新的java插件,该插件允许在带有jnlp的网页中嵌入小程序。 我想延迟加载applet所需的一个jar文件,但无法使其工作 这是我的jnlp文件: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&
<?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