zoukankan      html  css  js  c++  java
  • 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);
                }
            });
    

      

  • 相关阅读:
    HDU 5514 Frogs 欧拉函数
    HDU 5521 Meeting 最短路
    HDU 5527 Too Rich 贪心
    HDU 5525 Product 数论
    MFC中 编辑框内组合键的使用
    MyEclipse+Struts+Hibernate+Mysql开发环境配置
    SSH框架介绍
    mysql忘记密码的解决办法
    VS2010 MFC中 窗口分割的实现
    VS2010 MFC中 创建文件夹及文件判空的方法
  • 原文地址:https://www.cnblogs.com/wykCN/p/5009444.html
Copyright © 2011-2022 走看看