display.syncExec方法例子
来源:互联网 发布:网络传真服务器 编辑:程序博客网 时间:2024/06/16 22:29
一个SWT程序至少需要一个Display对象,创建Display的线程称为UI线程,一个线程中不能有两个Display。
第一次调用Display.getDefault()会创建一个Display,以后再次调用会返回创建的Display。
或者显式定义一个Display:Display dis=new Display(),以后调用getdefault()也会返回创建的Display。
多线程程序中,采用Display.getCurrent()可以获取当前线程的Display,调用Display.findDisplay(Thread)可以找到任意线程的Display。
在多线程中不要使用getDefault(),容易导致非法线程访问异常。
Shell代表一个窗口,可以基于Display创建Shell,或者基于父Shell创建子shell,若父shell被关闭,子Shell也自动关闭。
使用Display.getMonitors()可以获取与Display相关的所有监视器,getPrimaryMonitor()可以获取主监视器,监视器(Monitor)的边界代表屏幕大小,客户区通常小于监视器尺寸.Monitor.getBounds();monitor.getClientArea(),用于获取边界和客户区。
多线程同步:Display维护一个自定义的事件队列,供后台线程与UI线程同步,后台线程利用Runalble对象插入事件队列,display执行消息循环时就会执行这些操作,Display提供了两个方法向队列中插入事件:
第一次调用Display.getDefault()会创建一个Display,以后再次调用会返回创建的Display。
或者显式定义一个Display:Display dis=new Display(),以后调用getdefault()也会返回创建的Display。
多线程程序中,采用Display.getCurrent()可以获取当前线程的Display,调用Display.findDisplay(Thread)可以找到任意线程的Display。
在多线程中不要使用getDefault(),容易导致非法线程访问异常。
Shell代表一个窗口,可以基于Display创建Shell,或者基于父Shell创建子shell,若父shell被关闭,子Shell也自动关闭。
使用Display.getMonitors()可以获取与Display相关的所有监视器,getPrimaryMonitor()可以获取主监视器,监视器(Monitor)的边界代表屏幕大小,客户区通常小于监视器尺寸.Monitor.getBounds();monitor.getClientArea(),用于获取边界和客户区。
多线程同步:Display维护一个自定义的事件队列,供后台线程与UI线程同步,后台线程利用Runalble对象插入事件队列,display执行消息循环时就会执行这些操作,Display提供了两个方法向队列中插入事件:
Display.syncExec(),Display.asyncExec()。前者同步调用,通知UI在下一个事件循环时执行Runalble的run方法,同时线程将被阻塞,直到runable执行完毕,后者为异步调用,区别是线程不会被阻塞,runable执行完毕后不会得到通知。
public static void main(String[] args) { final Display display = new Display(); Shell shell = new Shell(display); shell.setText("Hello world!"); final Button button = new Button(shell, SWT.NONE); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { Thread thread = new Thread() { @Override public void run() { try { Thread.sleep(10000);//代表大量运算 } catch (Exception e2) { // TODO: handle exception } display.syncExec(new Runnable() { @Override public void run() { button.setText("finish");//运算完毕,提示通知 } }); } }; thread.start(); } }); button.setText("button"); button.setBounds(20, 15, 155, 25); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } display.dispose(); }
0 0
- display.syncExec方法例子
- [例子]Display syncExec() asyncExec() 方法的使用
- SWT组件Diaplay提供syncExec与asyncExec方法
- SWT中定时器的一种特殊实现方式/SWT中线程互访时display.asyncExec/display.syncExec...程序死掉无响应的解决办法
- PHP方法(assign)(display)
- SWT之syncExec与asyncExec
- display:table实现分页功能的例子
- display中getSize(Point)方法
- django表中的display方法
- SWT(JFace)体验之syncExec与asyncExec
- display
- display
- Display
- display
- Display
- display
- display
- Display
- opencv 学习笔记2
- 字符串的逆序
- ViewPager懒加载和事件分发机制图例
- 【特种兵Word教程】如何给Word 2013添加页眉页脚?
- 快速排序及快速选择
- display.syncExec方法例子
- 单向链表的实现
- lintcode-Candy-412
- LeetCode 13: Roman to Integer
- eclipse中没有MinGW GCC/Cross GCC/Cygwin GCC/linux GCC/MacOSX GCC/MinGW GCC/Solaris GCC(编译器)
- Linux用户、用户组权限管理详解
- C++入门学习——虚函数表介绍
- 【UE4/C++】切换镜头
- Android:AppCompat v21 - Material Design for Pre-Lollipop Devices!