javafx可观察列表如何防止竞争状况

时间:2020-03-18 19:57:23

标签: java javafx

我有一个用户类,该类将存储登录用户的信息,并等待服务器中的新信息并将其存储在observableList中。另外,我有一个阶段,在initialize方法中,我将获取列表的实例并添加一个将更新我的UI的侦听器。

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
    }

}

在我的控制器阶段,获取列表并添加侦听器:

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中,并通过长轮询或套接字请求等待新信息。

有时会打开一个阶段,以该信息将UI更新为当前信息,并添加侦听器以更新套接字中是否有新信息。我担心的是,当我将列表放在初始化程序中并调用Update UI时,很可能在添加侦听器之前会出现新信息。

ObservableList info = UserInfo.info;
updateUi(info);

如何防止这种比赛状况?

0 个答案:

没有答案