如何在GWT中预取图像?

Ant*_*nio 10 javascript java gwt image prefetch

我尝试了以下代码:

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);
Run Code Online (Sandbox Code Playgroud)

但它对我不起作用.我错过了什么吗?

dre*_*eak 7

仅当图像附加到DOM时,才会调用图像加载处理程序.所以你必须在loadHandler之外的DOM中添加图像:

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


Joe*_*oel 1

斯坦说的有道理。

我认为问题是由于某种原因没有调用 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);
Run Code Online (Sandbox Code Playgroud)

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