J'ai un groupe OptionGroup avec mutliSelect (true) (cases à cocher) dans mon application VAADIN. Lorsque je clique sur le champ case à cocher, une logique de calcul lourde est exécutée dans l'écouteur valueChange. Je voudrais empêcher l'interaction de l'utilisateur lorsque cette logique est exécutée. Je veux donc afficher un ProgressBar avec un indicateur indéterminé défini sur true à l'aide de la méthode d'interrogation.VAADIN - envoi de réponse à partir d'une logique de calcul lourde
La logique utilisée pour l'auditeur ValueChange se présente comme suit
@Override
public void valueChange(Property.ValueChangeEvent event) {
Thread valueChangeProcessorThread = new Thread(new ValueChangeProcessor(myComponent));
valueChangeProcessorThread.start();
}
Comme vous pouvez le voir, un fil est exécuté qui est défini comme suit
private class ValueChangeProcessor implements Runnable {
private final MyComponent myComponent;
public ValueChangeProcessor(MyComponent myComponent) {
this.myComponent = myComponent;
}
public synchronized MyComponent getMyComponent() {
return myComponent;
}
@Override
public void run() {
getMyComponent().getUI().access(new Runnable() {
@Override
public void run() {
showWaitIndicator();
}
});
// Some heavy computation logic
hideWaitIndicator();
}
}
J'utilise ici UI.access() pour affiche un ProgessBar indéterminé. La logique pour le faire est disponible dans la méthode showWaitIndicator(). Lorsque le calcul est terminé, je masque le ProgressBar en appelant la méthode hideWaitIndicator().
Ici, il arrive que parfois la méthode showWaitIndicator() soit exécutée seulement après que la méthode de calcul et hideWaitIndicator() soit exécutée. Comment puis-je m'assurer que tout est exécuté dans l'ordre voulu?
Merci de partager votre solution. Mais je suis toujours à la recherche d'aide pour résoudre le problème avec la logique de ma solution. – shaunthomas999
Utilisez la même logique que dans mon code: Dans votre méthode d'écoute de changement de valeur, ajoutez d'abord un écouteur d'attachement à votre indicateur d'attente, puis affichez votre indicateur d'attente. Ensuite, dans le gestionnaire d'attachement, démarrez votre thread d'arrière-plan. – Zalumon