我尝试使用ClientBundle实现将我的图片管理为一个大文件,并最小化HTTP请求。

我放入了gwt.xml

生成ClientBundle

公共接口ResourceBundle扩展ClientBundle {

public static final ResourceBundle INSTANCE = GWT.create(ResourceBundle.class);

@Source("tiles/smiley.png")
ImageResource smiley();


}

将找到图像,没有错误。

这是代码

@Override
    公共无效onModuleLoad(){

    CLogger.log("Start Engine");

    int width = 800;
    int height = 600;

    Canvas canvas = Canvas.createIfSupported();
    canvas.setWidth(width + "px");
    canvas.setHeight(height + "px");
    canvas.setCoordinateSpaceWidth(width);
    canvas.setCoordinateSpaceHeight(height);
    Context2d c = canvas.getContext2d();

    Image img = new Image(ResourceBundle.INSTANCE.smiley());
    img.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            CLogger.log(event.getSource() + " loaded");
        }
    });
    CLogger.log("Visible: " + img.isVisible());

    c.drawImage((ImageElement) new Image(ResourceBundle.INSTANCE.smiley()).getElement().cast(), 0, 0);

    RootPanel.get().add(canvas);


}

我创建一个简单的Canvas,并将尺寸设置为800x600。我创建一个新的Context2D对象以在Context处绘制图像,并将Canvas添加到RootPanel。

日志显示:

[20:10:21.676]-启动引擎
[20:10:21.851]-可见:真实
[20:10:21.853]-http://127.0.0.1:8888/engine/7D39451825E9952050F44A6B8E2E15F3.cache.png

图片存在于记录的URL下,因此一切正常。但是图像将不会绘制,或者会绘制但不会显示。

有人有主意吗?

我以为ClientBundle将Images加载为后端的开始。因此,如果我得到一个实例,则将加载每个图像/ CSS和其他填充的实例?

瑞格斯·马库斯(Regars Markus)

最佳答案

不能保证图像内容被同步加载。根据浏览器的功能和图像数据的大小,资源可能存储为独立文件,这似乎就是您要描述的情况(即cache.png)。这样的表述有什么区别吗?

final Image img = new Image(ResourceBundle.INSTANCE.smiley());
img.addLoadHandler(new LoadHandler() {
  public void onLoad(LoadEvent e) {
    c.drawImage((ImageElement) img.getElement());
  }
}
RootPanel.get().add(img);

07-24 09:21