`

SWT笔记2——测试UI线程的事件处理

 
阅读更多



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();
			}
		}
	}

}

  • 大小: 25.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics