Eclipse Rap开发 异步刷新UI处理

1、Display.getCurrent()获取的是当前线程的display对象,如果当前在非UI线程中那么获取到的display对象为空;
     一般Display.getCurrent() 用来判断当前是否UI线程
2、异步刷新问题,
  • 异步任务需要放到非UI线程中执行,
  • 回头更新UI的时候需要使用display.asynExec(runnable)来执行具体更新UI效果的操作,保证线程的非阻塞
上面的方法在RCP中有效,RAP中刷新UI后需要鼠标点击一次才能出现刷新后的效果
 
btnNewButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
				new Thread(new Runnable(){

					@Override
					public void run() {
						try {
							Thread.sleep(3000);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
//						Display.getCurrent().asyncExec(new Runnable(){//null point current thread is not ui thread
						shell.getDisplay().asyncExec(new Runnable(){
							@Override
							public void run() {
								text.setText("我特么是异步的!!!???");
							}
						});
					}
					
				}).start();
			}
		});

  

 

 

需要实现异步UI刷新效果(WEB中的数据推送) 需要通过以下模型来实现(不过这个模型是阻塞式的交互效果并不好)

container.getDisplay().timerExec(0, new Runnable(){
            @Override
            public void run() {
                display.timeExec(1000,this);
            }
        });

  

posted @ 2015-12-01 10:53  wykCN  阅读(410)  评论(0编辑  收藏  举报