button.addSelectionListener(new SelectionAdapter() {
         @Override
         public void widgetSelected(SelectionEvent e) {
         for (int i = 0; i <5; i++) {
          TableItem ti=new TableItem(table, SWT.NONE);
          ti.setText(0, "ccccccccc");
                    
          try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
        
        
         }
        }); 
这样他会过10秒一次性把5条item显示出来

解决方案 »

  1.   

    GUI是单线程的,你要在事件处理函数中另外启动线程才能实现类似的效果。
      

  2.   

    尝试下面代码看看
    e.display.syncExec(new Runnable() {

    @Override
    public void run() {
    for(int i=0;i<10;i++){
    new TableItem(table, SWT.NONE).setText("ggggg"+i);
    try {
    TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    table.update();
    }
    }
    });

      

  3.   

    btnCcc.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
    if (!shell.getDisplay().isDisposed()) {       Runnable runnable = new Runnable() {             public void run() {              for (int i = 0; i < 5; i++) {
             TableItem ti = new TableItem(table, SWT.NONE);
             ti.setText(0, "ccccccccc");          try {
             Thread.sleep(2000);
             } catch (InterruptedException e1) {
             // TODO Auto-generated catch block
             e1.printStackTrace();
             }
             }             }             };       shell.getDisplay().syncExec(runnable); // 关键在这一句上 } }
    });
    木有作用