在我的 SWT Java 应用程序中,我经常希望从 Display.syncExec() 调用内部返回信息。到目前为止我发现的最好方法是:
final ArrayList<Integer> result = new ArrayList<Integer>();
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
is not thread-safe 。您可以使用 Collections.synchronizedList
获取线程安全的 List
。但是,在您的情况下使用 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()) { /* ... */ }
关于java - 从syncExec返回变量的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76300/