У меня есть приложение Java SWT, которое запускает отдельный поток (кроме пользовательского интерфейса) для подключения к серверу чата.Если я хочу обновить компоненты пользовательского интерфейса из потока подключения, я легко могу сделать следующее:
myUIclass.MyShellReference.getDisplay().asyncExec(
new Runnable() {
public void run(){
... update some UI component
}
}
);
Моя проблема в том, что я не могу найти хороший способ получить данные из компонентов в потоке пользовательского интерфейса.Примером может быть попытка создать метод в моем потоке соединения, чтобы вытащить строку, введенную в текстовое поле в потоке пользовательского интерфейса ...
private String getTheText(){
final String thetext;
myUIclass.MyShellReference.getDisplay().asyncExec(
new Runnable() {
public void run(){
// The below wont' work because thetext is final
// which is required in a nested class... blah!
thetext = myUIclass.getTextFromSomeTextBox();
}
}
);
return thetext;
}
Проблема выше в том, что я не могу на самом деле захватвозвращается из метода getTextFromSomeTextBox (), потому что я могу использовать только конечные переменные, которые не могут быть назначены.Единственное другое решение, которое я знаю, это использование некоторого эталонного объекта Atomic, но должен быть лучший способ, так как я уверен, что люди должны делать это постоянно.
Любая помощь будет принята с благодарностью !!!