2011-10-12 3 views
0

sans utiliser la bibliothèque de chargement d'image, je suis le chargement et le traitement des images comme ci-dessous:GWT image Chargement (onLoad) pour toile

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

Le résultat:

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; 

Mais je l'espère ressemble :

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; 

Je sais qu'après avoir attribué une valeur à img.src, l'image n'est pas immédiatement disponible. Il doit être chargé en premier. L'élément img déclenchera un événement onload, dès que l'image sera chargée. J'essaye d'ajouter le temporisateur et de mettre l'image à l'élément DOM différent. Ça ne marche pas.

Mes questions sont, Comment déclencher l'élément d'image à charger immédiatement? ou laissez ImageProcess attendre jusqu'à la fin du chargement?

Répondre

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

Avec cette ligne vous forcez le chargement de l'image directement. Je pense que votre problème est que la boucle est terminée avant même qu'une image ait été transférée du serveur. Vous voyez d'abord les sorties d'image, puis les sorties de chargement.

Maintenant, je ne sais pas pourquoi il est si important pour vous d'ajouter une image, effectuer son onload, ajoutez l'image suivante, et ainsi de suite ...

Mais je suis sûr que cela peut être facilement atteint par écrire une méthode qui ajoute une image au DOM, et dans son gestionnaire onload, vous appelez à nouveau la méthode pour l'image suivante. Et ainsi de suite jusqu'à ce que vous atteigniez votre critère d'arrêt.

Salutations Stefan

+0

1. Je charger les images à partir du disque local, et non serveur. mécanisme de chargement est un javascript natif. C'est très rapide et difficile à partager. Je dois traiter chaque image une à une, sinon elle me manquera de mémoire. 2. Je tente de porter "natif ImageGenerator javascript()" à gwt pour tester votre idée, merci beaucoup. – user990653

+0

J'essaie de mettre en œuvre votre idée. Mais cela provoque des fuites de mémoire. Existe-t-il un mécanisme de condition d'attente dans GWT? – user990653

+0

Pour autant que je sache, il n'y a pas de mécanisme d'attente. Peut-être qu'un retrait fonctionnerait ... –