0

画像読み込みライブラリを使用せずに、以下のように画像を読み込んで処理しています。

ImageGenerator(){
  for(int i=0;i<100;i++){
      ImageProcess( data-i , i );
  }
}

ImageProcess( String data , int i ){
  final Image img = new Image(data);
  img.setVisible(false);
  RootPanel.get().add(img);
  GWT.log( "image " + i );
  img.addLoadHandler(new LoadHandler() {
      @Override
      public void onLoad(LoadEvent event) {
          GWT.log( "onload " + i + " " + img.getWidth() );
          ImageElement data = ImageElement.as(img.getElement());
          RootPanel.get().remove(img);
          obj.setData(data);
          ..obj processing
      }
  });
}

結果 :

image 1;
image 2;
image 3;
..
image 98;
image 99; <-- finish for loop
onload 1; <-- start loading image
onload 2;
onload 3;
..
onload 98;
onload 99;

しかし、私はそれが次のように見えることを願っています:

image 1;  <-- generate image and load image step by step
onload 1;
image 2;
onload 2;
image 3;
onload 3;
..
image 98;
onload 98;
image 99;
onload 99;

img.src に値を割り当てた後、画像がすぐに利用できないことがわかっています。最初にロードする必要があります。img 要素は、画像の読み込みが完了するとすぐに onload イベントを発生させます。タイマーを追加して、画像を別のDOM要素に配置しようとしています。うまくいきません。

私の質問は、画像要素をトリガーしてすぐにロードする方法は? または ImageProcess を onload が終了するまで待機させますか?

4

1 に答える 1

0
 RootPanel.get().add(img);

この行を使用すると、画像を強制的に直接ロードできます。あなたの問題は、サーバーから画像が1つでも転送される前にループが終了したことだと思います。したがって、最初に画像出力が表示され、次にオンロード出力が表示されます。

画像を追加し、そのオンロードを実行し、次の画像を追加することがなぜそれほど重要なのかわかりません...

しかし、DOM に画像を追加するメソッドを作成し、その onload ハンドラーで次の画像のためにメソッドを再度呼び出すことで、これを簡単に実現できると確信しています。というように、停止基準に達するまで続けます。

こんにちはステファン

于 2011-10-12T09:39:43.817 に答える