Bonjour,

Dans mon application RCP j'essaye d'utiliser les Job d'Eclipse (http://www.eclipse.org/articles/Arti.../jobs-api.html)

Mais je rencontre des difficultés pour stopper un job depuis l'interface.

Je m'explique :

Lorsque l'on clique sur le bouton exécuter de mon application je crée le job 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
job = new Job("Execution") {
        protected IStatus run(IProgressMonitor monitor) {
            monitor.beginTask("Execution", 100);
                Execution.execute(pathFile, classNameFinal, classPathFinal);    //execute the code
                if(monitor.isCanceled()) return Status.CANCEL_STATUS;    
            return Status.OK_STATUS;
        }
    };
 
job.addJobChangeListener(new JobChangeAdapter() {
 
        @Override
        public void done(IJobChangeEvent event) {
 
            if (event.getResult().isOK()) {
                MessageDialog.openInformation(window.getShell(), "Arret de l'execution",
                "Execution terminée avec succés");
            }else{
                MessageDialog.openWarning(window.getShell(), "Arret de l'execution",
                "Execution du programme interrompue");
            }
        }
    });
 
job.schedule();
la méthode :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
Execution.execute(pathFile, classNameFinal, classPathFinal);
se charge de charger une classe Java et d'invoquer sa méthode main.

Mais imaginons que dans cette méthode main il y un while(true){....}

Le Job va s'exécuter sans fin.

Pour cela je met à disposition un bouton qui permet d'arrêter le Job d'exécution en cours :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
try{
    ExecuteCodeAction.job.cancel();
 
}catch(Exception e){
    e.printStackTrace();
}
Malheureusement par ce moyen je n'arrive pas à stopper le job en question, il rentre bien dans une demande d'annulation (cancel requested)

Mais il ne s'annule pas.


Si vous pouviez me donner quelques indications cela me serait très utile

Merci à vous.