由于SWT组件的特殊性,在SWT中,通常存在一个被称为"用户线程"的唯一线程,只有在这个线程中才能调用对构件或某些图形API的访问操作。如果在非用户线程中程序直接调用这些访问操作,那么SWTExcepiton异常会被抛出。
IBM:线程问题http://www.ibm.com/developerworks/cn/java/l-swt/index.html
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
Button butt = new Button(panel,SWT.PUSH);
butt.setText("Push");
}
});
方法syncExec()和asyncExec()的区别在于前者要在指定的线程执行结束后才返回,而后者则无论指定的线程是否执行都会立即返回到当前线程。
swt加入swing组件
Composite locationComp = new Composite(shell, SWT.EMBEDDED);
java.awt.Frame locationFrame = SWT_AWT.new_Frame(locationComp);
final java.awt.TextField locationText = new java.awt.TextField();
locationFrame.add(locationText);
swt调用更新swing
EventQueue.invokeLater(new Runnable() {
public void run() {
// update swing component status
}
});