代码之家  ›  专栏  ›  技术社区  ›  Anthony

如何在gwt中预取图像?

  •  10
  • Anthony  · 技术社区  · 14 年前

    我尝试了以下代码:

    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);
    

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

    3 回复  |  直到 13 年前
        1
  •  7
  •   dreak    12 年前

    只有当图像附加到dom时,才会调用图像加载处理程序。因此,必须在loadhandler之外向dom添加图像:

    p.add(img);
    img.addLoadHandler(new LoadHandler() {
        @Override
        public void onLoad(LoadEvent event) {
            //do some stuff, image is loaded
        }
    }
    
        2
  •  1
  •   Joel    14 年前

    斯坦说的有道理。

    我认为问题在于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
  •  1
  •   vinnyjames    11 年前
    ImageElement img = DOM.createImg().cast();
    img.setSrc("images/myImage.png");