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); } }Dans le constructeur de la frameView rajoutez :
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); }
Rajouter un bouton pour lancer la DonothingTask.
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()); } });
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 :D'ailleurs la progresse bar et la busyicon ne changent plus dans ces moments là.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.
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?
Partager