[SWT] synchro widget avec thread
Bonjour,
j'ai un problème pour synchroniser le rafraichissement d'une Table avec un thread qui récupéré des données d'un port USB.
le thread rempli un Byte[] inputBuffer en fonction des données qu'il reçoit.
comment faire en sort que des que le inputBuffer.length est != 0 je lance un méthode de rafraichissement de mon Table qui soit synchroniser avec le display pour ne pas avoir la fameuse erreur "Invalid thread access"?
Merci pour votre aide.
TiTi.
Oups voila le message en entier
En fait cela provient du fait que Display sous SWT est déjà un thread d'où la fameuse erreur :
Exception in thread "main" org.eclipse.swt.SWTException : Invalid Thread access
Pour éviter cela il faut passer en 2 étapes
Dans ton programme principal, tu créés une méthode AfficheInfo de la forme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public void afficheInfo(String str){
class AfficheInfo implements Runnable{
String str="";
public AfficheInfo(String str){
this.str=str;
}
public void run() {
textStock.setText(str);
}
}
display.asyncExec(new AfficheInfo(str));
} |
Cette méthoed affiche la chaine str grace à la fonction display.asyncExec.
Dans ton Thread.
Tu rajoutes un appel à ta classe de départ par exemple MaFenetre sous la forme
Code:
1 2 3
|
private MaFenetre maFenetre = null; |
Puis dans le constructeur de ton Thread tu passes maFenetre.
A partir de là tu as acces à la fonction AfficheInfo dans ton thread sous la forme :
Code:
1 2
|
maFenetre.AfficheInfo("chaine d'info"); |
L'affichage de fera dans la fenetre principale
Bon courage