【问题标题】:JAR multiple downloadJAR 多重下载
【发布时间】:2010-10-11 12:23:57
【问题描述】:

我在一个小程序上有这个代码。小程序工作正常,但我得到了很多不必要的重复下载。特别是,我注意到每个“getResource”都会触发 .JAR 文件的下载。

static {
    ac = new ImageIcon(MyClass.class.getResource("images/ac.png")).getImage();
    dc = new ImageIcon(MyClass.class.getResource("images/dc.png")).getImage();
    //...other images
}

如何避免这种情况?

【问题讨论】:

    标签: java jar applet download overloading


    【解决方案1】:

    只需删除 URLConnection.setDefaultUseCaches(false) 的所有实例即可解决问题。

    详情请参考。

    http://java-junction.blogspot.com/2009/11/applet-jar-caching-not-working.html

    【讨论】:

    • 我没有在我的代码上设置这个标志,但是这是一个有趣的点。
    【解决方案2】:

    您是否将小程序包含在 HTML 页面中?如果是这样,请尝试启用 JAR 缓存,如下所述:http://java.sun.com/j2se/1.4.2/docs/guide/plugin/developer_guide/applet_caching.html

    如果由于某种原因这没有帮助 :) 可能会在 Web 服务器上沿您的小程序 JAR 公开您的资源/图像,并使用单独的 HTTP 请求访问它们(是的,它很丑,是的,它不会减少所需的下载次数,但它至少减少了需要传输的数据量)。

    【讨论】:

      【解决方案3】:

      只有一种解决方法:

      您可以将图像放在 jar 内的 zip 文件中,使用 ZipInputStream 获取并从那里提取图像。

      【讨论】:

      • (使用 ZipInputStream 而不是 ZipFile。)
      【解决方案4】:

      您使用哪种 Java 虚拟机?您使用哪个服务器?

      • Linux 上的浏览​​器插件存在错误。
      • 如果服务器不发送修改日期,则 Java 无法缓存 jar 文件。

      【讨论】:

        【解决方案5】:

        如果您的小程序总是下载 jar,即使 jar 被缓存,请确保您没有通过 API 禁用 URLConnection 的缓存:URLConnection.setUseCachesURLConnection.SetDefaultUseCaches

        ImageIcon 获取资源的底层机制是URLConnection。调用URLConnection.setDefaultUseCaches(false) 会设置“所有URLConnections 的静态状态的一部分”,这会导致JRE 忽略缓存并在每次访问时重新下载整个jar。

        只需删除setDefaultUseCaches 的所有实例即可解决问题。

        这是来自http://java-junction.blogspot.com/2009/11/applet-jar-caching-not-working.html的转贴

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-14
          • 1970-01-01
          • 2011-11-25
          • 2012-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-02
          相关资源
          最近更新 更多