Наблюдаемый список javafx, как предотвратить условие гонки - PullRequest
0 голосов
/ 18 марта 2020

У меня есть класс пользователя, который будет хранить информацию о моем зарегистрированном пользователе, ждать новой информации с моего сервера и сохранять ее в 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);

Как я могу предотвратить это состояние гонки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...