我有一个用户类,该类将存储登录用户的信息,并等待服务器中的新信息并将其存储在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);
如何防止这种比赛状况?