如何通过 webstart 使用 Java 下载缓存?

发布于 2024-09-11 02:50:54 字数 294 浏览 1 评论 0原文

我的 Java Webstart 应用程序下载一些大型资源文件。我使用:

URL url = new URL( "http://....." );
URLConnection uc = url.openConnection();
uc.setUseCaches( true );
uc.getInputStream();

但在下次启动时,资源会再次下载。这些文件也不出现在临时 Internet 文件的资源列表中。

在较旧的 Java 版本中,这可以工作。知道如何在当前版本中使用此缓存吗?

My Java Webstart application download some large resource files. I use:

URL url = new URL( "http://....." );
URLConnection uc = url.openConnection();
uc.setUseCaches( true );
uc.getInputStream();

But on the next start the resources are downloaded again. The files occur also not in the resources list of the temporary Internet files.

In older Java versions this has work. Any idea how I can use this cache with the current version?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

貪欢 2024-09-18 02:50:54

不适用于较旧的 Java 版本。它可以与 Java Applet 配合使用。以下是如何为 JNLP 启用 Java 缓存的解决方案。您需要在代码中调用一次 JnlpResponseCache.init() 来启用它。

class JnlpResponseCache extends ResponseCache {
    private final DownloadService service;

    private JnlpResponseCache(){
        try {
            service = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
        } catch( UnavailableServiceException ex ) {
            throw new NoClassDefFoundError( ex.toString() );
        } 
    }

    static void init(){
        if( ResponseCache.getDefault() == null ){
            ResponseCache.setDefault( new JnlpResponseCache() );
        }
    }

    @Override
    public CacheResponse get( URI uri, String rqstMethod, Map<String, List<String>> rqstHeaders ) throws IOException {
        return null;
    }

    @Override
    public CacheRequest put( URI uri, URLConnection conn ) throws IOException {
        URL url = uri.toURL();
        service.loadResource( url, null, service.getDefaultProgressWindow() );
        return null;
    }

}

Not with older Java version it has work. It has work with Java Applets. Here is a solution how you can enable the Java Cache also for JNLP. You need to call once JnlpResponseCache.init() in your code to enable it.

class JnlpResponseCache extends ResponseCache {
    private final DownloadService service;

    private JnlpResponseCache(){
        try {
            service = (DownloadService)ServiceManager.lookup("javax.jnlp.DownloadService");
        } catch( UnavailableServiceException ex ) {
            throw new NoClassDefFoundError( ex.toString() );
        } 
    }

    static void init(){
        if( ResponseCache.getDefault() == null ){
            ResponseCache.setDefault( new JnlpResponseCache() );
        }
    }

    @Override
    public CacheResponse get( URI uri, String rqstMethod, Map<String, List<String>> rqstHeaders ) throws IOException {
        return null;
    }

    @Override
    public CacheRequest put( URI uri, URLConnection conn ) throws IOException {
        URL url = uri.toURL();
        service.loadResource( url, null, service.getDefaultProgressWindow() );
        return null;
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文