Applet 由 Java Web Start 提供,在查看 JAR 文件之前请求的资源给 WEB Server

2022-09-02 22:39:07

我是新来的,我为我的英语不好道歉。

我对Java Web Start技术提供的Applet类有一点问题。我有一些依赖于平台的JAR文件,其中Web Start可以正确下载,但是当我通过对象的方法获取内容时,首先向WEB Server发出GET请求,在收到响应后,从JAR文件中正确加载资源。问题是我在JAR中有很多文件,所以我在WEB服务器上有很多不必要的负载,因此我必须等待很长时间才能使用Applet。getResourceAsStream(String fileName)ClassLoaderfileName404 Not Found

在Google上搜索,我发现了一些讨论,据说可以添加带有值的参数,但这并没有解决问题。此页面与参数相关,表明 Applet 的默认行为是从 JAR 文件加载资源,然后从 Applet 代码库加载资源,在我的情况下,行为恰恰相反。codebase_lookupfalsecodebase_lookup

我还为文件中的每个 JAR 资源添加了属性,但行为始终相同。Applet 是用 NetBeans 开发和构建的,生成的 html 和 jnlp 文件如下。eager="true".jnlp

启动.html

<applet width="300" height="300">
        <param name="jnlp_href" value="launch.jnlp"/>
        <param name="codebase_lookup" value="false"/>
</applet>


launch.jnlp

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://192.168.23.4/contact" href="launch.jnlp" spec="1.0+">
<information>
    <title>ContactNR</title>
    <vendor>Roberto Santini</vendor>
    <homepage href=""/>
    <description>ContactNR</description>
    <description kind="short">ContactNR</description>
</information>
<resources>
<j2se version="1.5+"/>
<jar eager="true" href="ContactNR.jar" main="true"/>
<jar eager="true" href="lib/VDK.jar"/>
<security>
    <all-permissions/>
</security>
</resources>
<resources arch="amd64" os="Linux">
    <jar eager="true" href="lib/liblinux64.jar"/>
</resources>
<resources arch="x86_64" os="Linux">
    <jar eager="true" href="lib/liblinux64.jar"/>
</resources>
<resources arch="x86" os="Linux">
    <jar eager="true" href="lib/liblinux.jar"/>
</resources>
<resources arch="i386" os="Linux">
    <jar eager="true" href="lib/liblinux.jar"/>
</resources>
<resources os="Windows">
    <jar eager="true" href="lib/libwin.jar"/>
</resources>
<resources os="MacOs">
    <jar eager="true" href="lib/libmac.jar"/>
</resources>
<applet-desc height="300" main-class="com.netresults.voip.ContactNR" name="ContactNR" width="300">
    <param name="codebase_lookup" value="false"/>
</applet-desc>
</jnlp>

有人可以帮助我吗?谢谢,

罗伯托。


答案 1

我通过向 JAR 文件添加索引来解决此问题。构建 jar 后,运行以下命令:

JAR -i <path/to/jar-file>

它必须作为独立于实际 JAR 的步骤运行。

说明: 当启动过程遇到 INDEX 时。在META-INF中的LIST中,它信任这一点,并且不会去寻找服务器上的文件。


答案 2

我最近遇到了一个类似的问题,log4j通过GET查询丢失的资源。也许在你的情况下,基于Web的类路径仍然比捆绑的jar有一定的优先权?好吧,您可以尝试将所有罐子装入一个罐子中。这当然会使构建复杂化,但您可以手动尝试一次,以查看问题是否消失。


推荐