开一个线程,然后获取一组数据,要求在swt的shell上立即显示出获取的数据信息,现在我只能实现添加一个按钮,然后实现监听器接口,靠单击这个按钮来即时的更新这组数据,问:如何自动即时的更新数据?希望能给点思路或者示例代码也行,这个问题我想了几个月了一直没有满意的回复,很多人建议搞个定时器,那么请问如何实现这个定时器呢?还有更好的办法么?期望得到高手们的回复谢谢!

解决方案 »

  1.   

    你的数据从哪里来?可不可以监听到数据改变这个事件呢?如果能够监听到,直接在数据改变时更新即可...如果没法监听,那么只能启用一个线程来定时刷新数据了,提供个简单的思路:UIJob job = new UIJob("updating data"){ // 该线程必须是UI线程
                    public IStatus runInUIThread(IProgressMonitor monitor) {
                        while(true) {
                            if(dataChanged()) { // 数据有变化才更新
                                 updateData(); // 在UI上更新数据
                            }
                            Thread.sleep(10000); // 每隔10秒去检查(更新)数据,根据你的需要调整
                        }                   
                        return Status.OK_STATUS;
                    }
                };
                job.setSystem(true);
                job.schedule();    
      

  2.   


    UIJob job = new UIJob("updating data"){ // 该线程必须是UI线程
                    public IStatus runInUIThread(IProgressMonitor monitor) {
                        while(true) {
                            if(dataChanged()) { // 数据有变化才更新
                                 updateData(); // 在UI上更新数据
                            }
                            Thread.sleep(10000); // 每隔10秒去检查(更新)数据,根据你的需要调整
                        }                   
                        return Status.OK_STATUS;
                    }
                };
                job.setSystem(true);
                job.schedule();    
    上面代码格式有点问题,另外在需要停止线程的时候要关掉这个线程(job.cancel())....
      

  3.   


    我的数据是从非UI线程中得到的,现在我要在一个label上自动刷新这个数据的值,应该无法监听到这个值