У меня есть класс пользователя, который будет хранить информацию о моем зарегистрированном пользователе, ждать новой информации с моего сервера и сохранять ее в observableList. Также у меня есть этап, на котором в методе initialize я возьму экземпляр списка и добавлю прослушиватель, который обновит мой пользовательский интерфейс.
class UserInfo {
public static ObservableList info;
public void setUser(user){
FXCollections.observableList(user.getInfo);
}
private void waitNewInfo(Socket socket){
info.addAll(socket.value);
//Here I have a request to the server which is long-polling or websocket waiting for new info
}
}
На моем этапе Controller возьмите список и добавьте прослушиватель:
public class ControllerLoginFirstStyle {
@FXML
public void initialize(){
ObservableList info = UserInfo.info;
updateUi(info);
info.addListener((ListChangeListener) c -> {
c.next();
updateUi(c.getAddedSubList());
});
}
public void updateUi(List info){
//here I update the UI
}
}
Поэтому, когда пользователь входит в систему, я вызываю setUser с пользовательским объектом, и он сохраняет информацию в observableList и ждет новой информации с помощью длинных запросов или запросов сокетов.
В какой-то момент открывается этап, когда эта информация обновляет пользовательский интерфейс текущей информацией и добавляет прослушиватель для обновления пользовательского интерфейса, если в сокете появляется новая информация. Меня беспокоит то, что когда я беру список в инициализаторе и вызываю интерфейс обновления, существует открытая вероятность того, что новая информация появится, прежде чем я добавлю слушателя.
ObservableList info = UserInfo.info;
updateUi(info);
Как я могу предотвратить это состояние гонки