如何在GWT中预取图像?

我尝试了以下代码:

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

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

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

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

斯坦所说的有道理。

我认为问题是由于某种原因没有调用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

 ImageElement img = DOM.createImg().cast(); img.setSrc("images/myImage.png");