编辑1:我想我可能已经弄明白了.
这是我的initialize()方法
public void initialize(URL location, ResourceBundle resources) {
groupList.setItems(createGroupFilter());
groupList.getSelectionModel().selectedItemProperty().addListener(obs -> {
Group.setSelectedGroup(groupList.getSelectionModel().getSelectedItem());
handleGroupSelected();
});
Run Code Online (Sandbox Code Playgroud)
我认为当我重新加载groupList ListView时,正在调用这个selectedItemProperty侦听器并将其设置为null.
我通过在侦听器中添加if条件来修复此问题:
public void initialize(URL location, ResourceBundle resources) {
groupList.setItems(createGroupFilter());
groupList.getSelectionModel().selectedItemProperty().addListener(obs -> {
if(groupList.getSelectionModel().getSelectedItem() != null) {
Group.setSelectedGroup(groupList.getSelectionModel().getSelectedItem());
handleGroupSelected();
}
});
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我的静态'selectedGroup'变量被设置为null,我无法弄清楚原因.
我已经进行了以下故障排除.
我有一个名为'refresh()'的方法,它调用一个名为'createGroupFilter()'的方法.我已经包含了以下System.out.println语句,以便查看变量何时变为空.
private void refresh() {
System.out.println("before groupList.setItems(createGroupFilter()); " + Group.getSelectedGroup()); //TROUBLESHOOTING
groupList.setItems(createGroupFilter());
System.out.println("after groupList.setItems(createGroupFilter()); " + Group.getSelectedGroup()); //TROUBLESHOOTING
if(Group.getSelectedGroup() != null) {
groupList.getSelectionModel().select(Group.getSelectedGroup());
int n = groupList.getSelectionModel().getSelectedIndex();
groupList.getFocusModel().focus(n);
groupList.scrollTo(n);
userList.setItems(createUserFilter());
if(User.getSelectedUser() != null) {
userList.getSelectionModel().select(User.getSelectedUser());
}
}
}
private FilteredList<Group> …Run Code Online (Sandbox Code Playgroud)