SWT中后台往界面上送数据的代码

       前两天做个项目,要后台用线程给前台送数据,没找到方法,老是报错,怀疑是SWT的问题,到处找SWT的资料看,都不成,

最后还是怀疑自己,发现了自己程序中的一个错误,最后才成功。SWT报错也奇怪,因为是我程序送的数据是NULL,结果不报我送的

程序出错处,而是最后是SWT...assertNotNull错误,使我以为是SWT的bug。

       以下是例子代码:

       界面程序:

     public class ShowWindow extends ApplicationWindow {

        public synchronized void addReceiveList(ArrayList receiveArr){

 

        //receiveList是在界面中用作model的List

        //receiveArr是后台送过来的新数据
        if(receiveArr==null)return;
         int len=receiveArr.size();
        log.info("receive len="+len);
         if(len==0)return;
         int size=receiveList.size();
            int extra=size+len-300;
          if(extra>0){
         for(int i=0;i<extra;i++) receiveList.remove(i);
          }
         receiveList.addAll(receiveArr);
           receiveViewer.setInput(receiveList);
             receiveViewer.refresh();
      }

 

       protected Control createContents(Composite parent) {

           .......   

         receiveViewer = new TableViewer(container, SWT.MULTI | SWT.FULL_SELECTION |                    SWT.BORDER|SWT.V_SCROLL|SWT.H_SCROLL);
           receiveTable = receiveViewer.getTable();
            receiveTable.setLinesVisible(true);
          receiveTable.setHeaderVisible(true);

             ......

       }

 

           ......

 

    }

 

 

     后台送数据的Thread:

       public class ReceiveThread extends Thread{

 

                      public void run() {

                              try{

                              ......

                              if(beanArr.size()>0){
                                       showWindow.getDisplay().syncExec(new Runnable(){
                                        public void run(){
                                                 showWindow.addReceiveList(beanArr);
                                 }
                             });
                           }      

                          }catch(Exception e){

                                    showWindow.getDisplay().asyncExec(new Runnable () {
                                               public void run () {
                                                 MessageDialog.openWarning(showWindow.getShell(),"系统出错","接收线程出错,已经停止运行!\n"+message);
                                            }
                                      });  

                          }

                      }

 

 

       }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值