Bonjour à tous,

Je me penche en ce moment sur la JSR 296 pour voir si elle me suffit pour ma future application. Pendant mes tests, j'ai remarqué une curieux comportement sur le taskmonitor.

Pour tester le comportement, créez une basic desktop application dans Netbeans 6.
Rajouter une Task qui ne fait qu'un parcours dans une boucle de 1 à 100 avec une pause.

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
 private class DoNothingTask extends Task {
 
        @Override
        protected Object doInBackground() throws Exception {
            for (int i = 0; i < 100; i++) {
                System.out.println("de " + this.getTitle() + " valeur de i : " + i);
                Thread.sleep(120L);
                this.setProgress(i);
            }
            return null;
        }
 
        public DoNothingTask(Application arg0, int count) {
            super(arg0);
            this.setTitle("une Tache "+count);
        }
    }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
   private int count=0;
    @Action
    public Task launchTask() {
        count+=1;
        return new DoNothingTask(Application.getInstance(), count);
    }
Dans le constructeur de la frameView rajoutez :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext());
        taskMonitor.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
 
            public void propertyChange(PropertyChangeEvent evt) {
                System.out.println("eventDispatch?"+SwingUtilities.isEventDispatchThread());
                System.err.println("Evenment : "+evt.getPropertyName());
            }
        });
Rajouter un bouton pour lancer la DonothingTask.

Lancez l'application, cliquez plusieurs fois sur le bouton. Il y a donc autant de tâches qui sont lancées. Si vous regardez dans la sortie vous verrez que la méthode propertyChange n'est pas toujours appelé quand il le faut.

Précision de la javadoc :
This class is not thread-safe. All of its methods must be called on the event dispatching thread (EDT) and all of its listeners will run on the EDT.
D'ailleurs la progresse bar et la busyicon ne changent plus dans ces moments là.

Vu le comportement que j'observe, j'hésite à faire un rapport de bug.
Qu'en pensez-vous? Est-ce que j'utilise mal la classe taskMonitor ou y a t'il un vrai problème?