在我的SWT Java应用程序中,我经常想从Display.syncExec()调用中返回信息.到目前为止,我发现这样做的最好方法是:
final ArrayListresult = new ArrayList (); GUI.display().syncExec(new Runnable(){ public void run() { MessageBox mb = /* ... */; /* set up messagebox */ result.add(mb.open()); }}); if (SWT.OK == result.get(0)) { /* ... */ }
我认为这是允许的,因为ArrayList是线程安全的,但是我应该使用更好的容器,还是更简单的方法?
ArrayList
不是线程安全的.你可以获得一个线程安全List
的Collections.synchronizedList
.但是,AtomicInteger
在您的情况下或AtomicReference
在更一般的情况下使用它更简单.
final AtomicInteger resultAtomicInteger = new AtomicInteger(); Display.getCurrent().syncExec(new Runnable() { public void run() { MessageBox mb = /* ... */; /* set up messagebox */ resultAtomicInteger.set(mb.open()); }}); if (SWT.OK == resultAtomicInteger.get()) { /* ... */ }