2017-08-22 3 views
0

Je travaille sur une application pour analyser des données à partir d'une arborescence de répertoires et, ce faisant, j'ai un moniteur de progression dans la barre d'outils inférieure. J'utilise java Files.walk() pour marcher dans la structure et j'essaie d'utiliser IEventBroker, pour envoyer un message à la partie barre d'outils pour incrémenter la barre de progression, mais la sienne ne semble pas fonctionner correctement pour moi. Est-ce que quelqu'un sait d'une meilleure approche pour cela?Eclipse - Implémentation et incrémentation d'une barre de progression swt dans la barre d'outils

Ceci est le code où la recherche commence et les événements diffusés.

Path file = Paths.get(directoryPath); 

    if (!file.toFile().exists()) 
    { 
     return null; 
    } 

    _broker.send(Constants.INITIALISE_PROGRESS_BAR, file.toFile().list().length); 

    try (final Stream<Path> pathStream = Files.walk(file)) 
    { 
     pathStream.forEach(path -> 
     { 

      _broker.send(Constants.INCREMENT_PROGRESS_BAR, "inc"); 

      ........ 

     }); 

    } 

Dans ma section barre d'outils j'ai les méthodes suivantes pour la taille maximale l'initialiser des progrès et pour incrémenter quand ils reçoivent un événement. Puisque je ne connais pas la taille de la structure du fichier, il vaut mieux ne pas l'incrémenter, mais plutôt avoir une sorte de progrès continuel.

+0

Alors est-ce une RCP « e4 »? Pour e4 IEventBroker devrait être bien, mais vous devez nous montrer du code. –

+0

C'est Greg, je vais poster maintenant dans une seconde. –

+0

Alors qu'est-ce qui ne va pas? –

Répondre

0

Une façon (en plus de ce projet @ greg-449) est de changer la façon dont vous tiriez les événements init/rafraîchissement comme celui-ci

@Inject 
private UISynchronize  sync; 
... 
sync.asyncExec(new Runnable() { 
    @Override 
    public void run() { 
    _broker.send(Constants.INCREMENT_PROGRESS_BAR, "inc");    
    } 
}); 
+0

J'ai essayé ceci avec la réponse de gregs mais j'ai toujours un problème avec cet async non appelé. Il met toujours à jour la barre de progression après l'analyse des fichiers. –

+0

Q: Est-ce que le code que vous avez posté ici avant dans la même classe ou dans 2 classes/instances différentes? – titou10

+0

Deux classes distinctes. Un émissions et d'autres simplement reçoit. –