[img]http://dl.iteye.com/upload/attachment/0065/7109/1b691960-f9ba-35bb-99b3-6b62b8dee1a8.png[/img]
import org.eclipse.swt.widgets.Display;
public class TestEventQueue {
public static void main(String[] args) {
final Display display = Display.getDefault();
Shell shell = new Shell();
shell.setSize(450, 300);
shell.setText("测试事件循环");
//直接处理,阻塞UI线程
final Button btnBlock = new Button(shell, SWT.NONE);
btnBlock.setToolTipText("直接处理事件,费时的操作会阻塞UI线程");
btnBlock.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
btnBlock.setText("按下按钮后的文字");
}
});
btnBlock.setBounds(10, 10, 107, 27);
btnBlock.setText("\u963B\u585EUI\u7EBF\u7A0B");
//新线程中处理费事的操作,再用display.syncExec()函数提交改变UI的操作,该操作会阻塞UI线程,但改变外观时间很短,忽略不计;不阻塞用display.asyncExec().
final Button btnUnblock = new Button(shell, SWT.NONE);
btnUnblock.setToolTipText("新线程中处理费事的操作,再用display.syncExec()函数提交改变UI的操作,该操作会阻塞UI线程,但改变外观时间很短,忽略不计;不阻塞用display.asyncExec()");
btnUnblock.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
display.syncExec(new Runnable() {
@Override
public void run() {
btnUnblock.setText("按下按钮后的文字");
}
});
}
}).start();
}
});
btnUnblock.setBounds(192, 10, 118, 27);
btnUnblock.setText("\u4E0D\u963B\u585EUI\u7EBF\u7A0B");
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
}