【问题标题】:How to prefetch image in GWT?如何在 GWT 中预取图像?
【发布时间】:2011-05-08 12:12:44
【问题描述】:

我尝试了以下代码:

RootPanel root = RootPanel.get("root");
root.clear();
final FlowPanel p = new FlowPanel();
root.add(p);
for (int i=0; i<20; ++i) {
    String url = "/thumb/"+i;
    final Image img = new Image(url);
    img.addLoadHandler(new LoadHandler() {
        @Override
        public void onLoad(LoadEvent event) {
        p.add(img);
    }
});
Image.prefetch(url);

但这对我不起作用。我错过了什么吗?

【问题讨论】:

    标签: java javascript image gwt prefetch


    【解决方案1】:

    仅在图像附加到 DOM 的情况下调用图像加载处理程序。所以你必须将图像添加到 loadHandler 之外的 DOM:

    p.add(img);
    img.addLoadHandler(new LoadHandler() {
        @Override
        public void onLoad(LoadEvent event) {
            //do some stuff, image is loaded
        }
    }
    

    【讨论】:

    • dreak 是对的,您的代码存在逻辑错误,并且 img 从未附加到 DOM。将您的代码与此 sn-p 进行比较
    【解决方案2】:

    Stan 说的很有道理。

    我认为问题在于由于某种原因没有调用 LoadHandler。我一直在没有 LoadHandler 的情况下进行管理,但我通常会根据 JavaDoc 演示添加一个 errorHandler,如果加载失败则会触发该错误处理程序。这应该有效:

    final Image img = new Image();
    
    img.addErrorHandler(new ErrorHandler() {
          public void onError(ErrorEvent event) {
            // Handle the error
          }
        });
    
    img.setUrl(url);
    p.add(img);
    

    请参阅 GWT Javadoc 中的示例:http://google-web-toolkit.googlecode.com/svn/javadoc/2.1/com/google/gwt/user/client/ui/Image.html

    【讨论】:

      【解决方案3】:
      ImageElement img = DOM.createImg().cast();
      img.setSrc("images/myImage.png");
      

      【讨论】:

      • 这有什么帮助?
      • 这是完成预取的一种更短的方式
      • 但是如何将 ImageElement 变成 Image 呢?
      • 不确定是否/如何将 ImageElement 转换为 Image
      • 如何在 ImageElement 上设置 onload 处理程序?
      猜你喜欢
      • 2015-12-10
      • 2014-08-31
      • 2011-05-30
      • 2011-01-16
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多