IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SWT/JFace Java Discussion :

[RCP] Utilisation des "jobs" eclipse pour effectuer des tâches simultanées


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut [RCP] Utilisation des "jobs" eclipse pour effectuer des tâches simultanées
    Bonjour à tous,

    Dans l'application RCP que je suis en train de développer, je voudrais pouvoir exécuter plusieurs tâches en même temps. Pour être plus précis, je dispose d'une vue d'affichage de donées(via un tableViewer) qui se "décline" en plusieurs onglets. Dans chaque onglet donc, je voudrais raffraichir le tableViewer toutes les 30 secondes, et donner la possibilité à l'utilisateur d'avoir un feedback(progressBar sur la statusLine notemment) pour signaler dans combien de temps aura lieu le prochain rafraichissement.

    Après avoir un tout petit peu googlé, je me suis rendu compte que je devait utiliser pour cela des "jobs" eclipses.J'ai donc trouvé ce tuto, que je n'arrive malheuresement pas à exploiter. En effet, quand j'applique les exemples du tuto, je n'ai pas le progressBar dans la StatusLine.

    Sauriez vous si cela nécéssite une action particulière en plus sur les statusLine? Auriez vous un tuto plus simple ou même un exemple sur le quel je pourrais m'inspirer pour commencer?

    Comme d'habitude, merci pour tout!

  2. #2
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bonjour à tous,

    J'ai implémeJ'arrive à rafraichir ma vue(instance de vue sous forme d'onglet) dans un "job" eclipse toute les 10 secondes. Cependant, je ne comprends pas pourquoi le progressbar qui devrait être présent dans la statusLine ne l'est pas.

    De plus, lorsque je lance le refresh sur ma vue, je ne peux plus rien faire sur l'application, ce qui m'embête énormement. En effet, je voudrais pouvoir, lorsque le refresh est en cour sur une une vue, effectuer les autres tâches que me proposent l'application (afficher d'autres vues, y effectuer des filtres, et même d'autres refresh.)

    Le code de mon job est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    setRefreshTableActionOn = new Action ("Set Refresh On", Action.AS_PUSH_BUTTON){
    	public void run(){	
    		Job job = new Job("Refreshing view ..."){
    			@Override
    			protected IStatus run(IProgressMonitor monitor) {
    				// refresh view in the UI thread
    				try {
    					Display.getDefault().asyncExec(new Runnable() {
    						public void run() {		
    							try {
    								Thread.sleep(5000);						
    								disposeColumns(viewer);								
    								ModelProvider myModelProvider = new ModelProvider(myQuery, myDataSource);
    								refreshColumns(viewer, myModelProvider);
    								viewer.refresh();
    							} catch (InterruptedException e) {
    								Activator.getLogger().error(e);	
    							}																	
    						}				
    					});
    					return Status.OK_STATUS;	
    				} finally {
    				   schedule(); // recommencer une fois que c'est fini
    				}										
    			}													
    		};
    		job.setName("Refreshing " + ResultView.this.getPartName() + " view ...");
    		job.schedule(); // start as soon as possible				
    	}			
    };
    Merci de votre aide

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bonjour à tous,

    j'ai un peu avancé sur la question et je suis en mesure aujourdui d'éffectuer à l'aide de jobs eclipse, un refresh du tableViewer d'une vue toutes les x secondes, tout cela avec un progress dans la statusLine signalant d'une certaine manière le temps restant pour la prochaine update. Le code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public void run(){	
    	Job job = new Job("Waiting for next update ..."){
    		protected IStatus run(final IProgressMonitor monitor) {
    			// refresh view in the UI thread
    			try {
    				monitor.beginTask("Refreshing view ...", autoRefresh);
    				Display.getDefault().asyncExec(new Runnable() {
    					public void run() {
    						// Rafraichissement du viewer
    						ModelProvider myModelProvider = new ModelProvider(myQuery, myDataSource);						
    						viewer.setContentProvider(new DataRowContentProvider());
    						viewer.setLabelProvider(new DataRowLabelProvider());										
    						viewer.setInput(myModelProvider.getTblRows());				
    						viewer.refresh();
    					}				
    				});				
    				// on attends ensuite "autoRefresh" secondes
    				try {
    					for (int i=0; i<autoRefresh; i++){
    						Thread.sleep(1000);
    						monitor.worked(1);									
    					}						
    				} catch (InterruptedException e) {
    					Activator.getLogger().error(e);	
    				}																												
    			} finally {
    			   schedule(); // recommencer une fois que c'est fini
    			}			
    			return Status.OK_STATUS;
    		}													
    	};				
    	job.schedule(); // start as soon as possible				 
    }
    Tout ne pouvant pas être rose, je suis confronté à un autre problème. En effet, pour chaque instance de vue(onglet), je met à jour certaines informations sur la statusLine, et je voudrais en faire autant avec le progressBar de la statusLine que génère le job que je crée pour chaque vue. Malheursement, je ne sais pas comment m'y prendre.

    Actuellement, lorsque je dispose de plusieurs onglets, et que pour ces onglets, je déclenche le rafraichissement automatique, le progressBar reste le même, même si je passe d'un onglet à l'autre.

    Je voudrais donc, qu'au même titre que les autres infos que j'arrive à afficher sur la statusLine en fonction de l'onglet, que le progressBar présent sur la statusLine sois celui correspondant à l'onglet actif.

    En espérant que j'ai réussi à vous faire saisir mon problème, je vous remercie d'avance.

    Merci

Discussions similaires

  1. Réponses: 19
    Dernier message: 04/10/2006, 16h53
  2. Réponses: 2
    Dernier message: 27/04/2006, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo