Bonjour

J'ai un petit probleme avec un thread.
J'ai crée un tableviewer dans mon thread principal, puis je lance un thread qui se connecte en tant que serveur.
J'aimerais ajouter des tableItems dans mon tableViewer:

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
26
27
28
29
30
31
32
 
public class DbgConsole extends ViewPart {
 
  public void createPartControl(Composite parent) {
    tableDisplay = new TableDisplay(parent);
 
    makeActions();
  }
 
  private void makeActions() {	
    actionStart = new Action(){
      public void run(){
	TelnetServer telnetserver = new TelnetServer(23, tableDisplay, null);
	telnetserver.start();
      }		
    };
  }
}
 
public class TelnetServer extends Thread {
  public TelnetServer(int port, TableDisplay tableDisplay, BufferedReader fin) {
    this.tableDisplay = tableDisplay;
  }
 
  public void run() {
    TableItem item1 = new TableItem(tableDispaly.getTable(), SWT.NONE);
    item1.setText(new String [] {"1", "test"}) ;
    // ...
    // pour chaque message recu sur le port, ajouter item
    // ...
  }
}
J'obtiens l'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (display.thread != Thread.currentThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
J'ai lu dans ce forum qu'il fallait utiliser, pour accèder à un "widget" SWT à partir d'un thread java,
la méthode asyncexec de l'objet Display.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Display.getDefault().asyncExec(new Runnable() {
               public void run() {
                      monChamp.setText("Le compteur vaut :" + cpt);
               }
            }
mais je n'ai pas compris ou l'utiliser.

merci pour votre aide.