我正在构建一个Java applet,它涉及从URL中的其他资源中下载图像。我发现图像正在缓存,可以在Temporary Internet Files / View ... / Resources下的Java控制面板中查看它们。不幸的是,我需要能够更新图像并在applet的执行之间出现这些更新,但缓存会导致问题。
我找不到任何有关控制这些资源缓存的信息。什么过程缓存资源以及如何控制它?特别是如何设置图像的到期时间,甚至可能设置特定的图像?
如果相关,我使用以下代码下载图像:( mt是MediaTracker对象)。
public BufferedImage getImageFromUrl(String url)
{
Image img = null;
try {
URL u = new URL(url);
img = java.awt.Toolkit.getDefaultToolkit().createImage(u);
mt.addImage(img, numImages++);
mt.waitForAll();
...
感谢您的帮助。
答案 0 :(得分:2)
使用它来避免来自服务器的缓存图像:
URL u = new URL(url);
URLConnection con = u.openConnection();
con.setUseCaches(false);
img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(u, con));
如果您想要控制到期时间,可以通过添加以下行来专门设置Cache-Control
或Expires
标题:
con.addRequestProperty("Cache-Control", "no-cache, max-age=3600");
con.addRequestProperty("Expires", "Thu, 17 Mar 2011 01:34:00 GMT");
答案 1 :(得分:1)
使用URLConnection
将图像下载到byte
数组中。将此byte
数组传递给createImage()
。您可能还想通过调用setUseCaches(false)
对象上的URLConnection
来关闭缓存。