WizardPage JFace qui freeze
Bonjour,
Nouveau en Java & en jFace, j'ai une fenêtre qui se gèle sur un traitement long. Après recherche sur internet, j'ai testé des tas de solutions sans succès. Je suis dessus depuis 24H, et ça commence à être pénible.
Plus précisément, j'ai une WizardPage jFace avec un Button et une ProgressBar.
Lorsque le Button est cliqué, il déclenche un traitement long effectué dans un thread annexe.
Le gestionnaire d'événement de ce Button instancie le Thread et le start() dans la foulée.
Ce Thread déclenche des événements écoutés par la WizardPage pour l'informer de la progression du traitement.
Celle-ci met alors à jour la ProgressBar dans le gestionnaire associé. Tout fonctionne sauf que la fenêtre ne répond quasiment pas et si j'arrive à la déplacer, la ProgressBar ne se met plus à jour. Bref, soit la ProgressBar se met à jour, soit je peux bouger la fenêtre mais pas les deux :(
Une idée ? la suite plus bas.
Ça marche pas. J'ai notamment la section suivante dont les résultats me semblent étranges.
Dans ce qui suit le "AVANT" est affiché, pas le après !
Code:
1 2 3
| System.out.println("AVANT");
myThreadTest.start();
System.out.println("APRES"); |
Voici le code :
### Mon StepEvent ###
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import java.util.EventObject;
public class StepEvent extends EventObject
{
public int step;
public StepEvent(int iStep)
{
super(iStep);
this.setStep(iStep);
}
public int getStep()
{
return this.step;
}
private void setStep(int iStep)
{
this.step = iStep;
}
} |
### Mon StepEventListener ###
Code:
1 2 3 4 5 6
| import java.util.EventObject;
public interface StepEventListener
{
public void handleStepEvent(EventObject e);
} |
### Ma WizardPage ###
### Mon handler pour le Button Clic ###
Code:
1 2 3 4 5 6 7 8 9 10
| public void handleEvent(Event iEvent)
{
ThreadTest myThreadTest = new ThreadTest();
myThreadTest.addStepEventListener(this);
...
System.out.println("AVANT");
myThreadTest.start();
System.out.println("APRES");
...
} |
### Mon handler pour le StepEvent ###
Code:
1 2 3 4
| public void handleStepEvent(EventObject e)
{
pbProcess.setSelection(((StepEvent) e).getStep());
} |
### Mon THREAD ###
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private ArrayList<StepEventListener> stepEventlisteners = new ArrayList<StepEventListener>();
public synchronized void addStepEventListener(StepEventListener iStepEventListener)
{
this.stepEventlisteners.add(iStepEventListener);
}
public synchronized void removeStepEventListener(StepEventListener iStepEventListener)
{
this.stepEventlisteners.remove(iStepEventListener);
}
private synchronized void sendStepEvent(int iStep)
{
for (StepEventListener myStepEventListener : this.stepEventlisteners)
{
myStepEventListener.handleStepEvent(new StepEvent(iStep));
}
} |
### Mon myThreadTest.start() ###
Code:
1 2 3 4 5 6
| while (...)
{
...
this.sendStepEvent(myPercent);
...
} |
Merci d'avance pour vos conseils / liens.