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); } });
时间: 2024-10-15 17:17:28