2

我在一个小程序上有这个代码。小程序工作正常,但我得到了很多不必要的重复下载。特别是,我注意到每个“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
}

如何避免这种情况?

4

5 回答 5

3

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

详情请参阅。

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

于 2009-11-29T11:03:35.043 回答
2

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

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

于 2009-03-05T14:08:02.937 回答
0

只有一种解决方法:

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

于 2009-03-05T13:49:08.070 回答
0

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

  • Linux 上的浏览​​器插件存在错误。
  • 如果服务器不发送修改日期,则 Java 无法缓存 jar 文件。
于 2009-03-09T21:32:24.443 回答
0

如果即使 jar 被缓存,您的小程序总是下载 jar,请确保您没有URLConnection通过 API 禁用 's 缓存: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的转贴

于 2011-07-29T11:55:58.313 回答