EDIT 1: Ich denke, ich habe es herausgefunden.Java - Warum wird meine statische Variable auf null gesetzt?
Hier ist meine Methode initialize()
public void initialize(URL location, ResourceBundle resources) {
groupList.setItems(createGroupFilter());
groupList.getSelectionModel().selectedItemProperty().addListener(obs -> {
Group.setSelectedGroup(groupList.getSelectionModel().getSelectedItem());
handleGroupSelected();
});
Ich denke, dass, wenn ich die Gruppenliste Listview diese selectedItemProperty Zuhörer neu laden aufgerufen wird und wenn er auf null.
Ich habe dieses Problem behoben durch Hinzufügen einer if Zustand im Inneren des Hörers:
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();
}
});
Aus irgendeinem Grund meine statische ‚selectedGroup‘ Variable wird auf Null, und ich kann nicht herausfinden, warum.
Ich habe die folgende Fehlersuche durchgeführt.
Ich habe eine Methode namens 'refresh()', die eine Methode namens 'createGroupFilter()' aufruft. Ich habe die folgenden System.out.println-Anweisungen eingefügt, um zu sehen, wann die Variable beendet wird.
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> createGroupFilter() {
System.out.println("start createGroupFilter(); " + Group.getSelectedGroup()); //TROUBLESHOOTING
groups = MainScreenModel.getGroups();
FilteredList<Group> filteredGroups = new FilteredList<Group>(groups, s -> true);
groupSearchTxt.textProperty().addListener(obs -> {
String filter = groupSearchTxt.getText().toLowerCase();
if(filter == null || filter.trim().length() == 0) {
filteredGroups.setPredicate(s -> true);
} else {
filteredGroups.setPredicate(s -> s.toString().toLowerCase().contains(filter));
}
});
System.out.println("end createGroupFilter(); " + Group.getSelectedGroup()); //TROUBLESHOOTING
return filteredGroups;
}
Dies liefert die folgende Ausgabe:
before groupList.setItems(createGroupFilter()); Group 1
start createGroupFilter(); Group 1
end createGroupFilter(); Group 1
after groupList.setItems(createGroupFilter()); null
So scheint es mir, dass die groupList.setItems() ... ist das, was das Problem verursacht.
Als Referenz ist hier die MainScreenModel.getGroups() -Methode:
public static ObservableList<Group> getGroups() {
ObservableList<Group> groups = FXCollections.observableArrayList();
try {
PreparedStatement stmt = DatabaseConnection.getConnection()
.prepareStatement("SELECT * FROM groups ORDER BY group_name ASC");
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
String gn = rs.getString("GROUP_NAME");
String desc = rs.getString("DESCRIPTION");
groups.add(new Group(gn, desc));
}
} catch (SQLException e) {
e.printStackTrace();
}
return groups;
}
und meine Fraktion Klasse auch:
public class Group {
private static Group selectedGroup;
private final StringProperty groupName = new SimpleStringProperty();
private final StringProperty description = new SimpleStringProperty();
public Group(String hn, String desc) {
setGroupName(hn);
setDescription(desc);
}
public StringProperty hostNameProperty() {
return this.groupName;
}
public String getGroupName() {
return this.groupName.get();
}
public void setGroupName(String hn) {
this.groupName.set(hn);
}
public StringProperty descriptionProperty() {
return this.description;
}
public String getDescription() {
return this.description.get();
}
public void setDescription(String desc) {
this.description.set(desc);
}
public static Group getSelectedGroup() {
return selectedGroup;
}
public static void setSelectedGroup(Group group) {
selectedGroup = group;
}
@Override
public String toString() {
return this.groupName.get();
}
}
Ist die Methode setSelectedGroup() jemals auf null gesetzt? – NormR
Ich kann keinen Ort sehen, an dem du es einstellst, oder fehlt mir etwas? – Itai
Ich wollte ungefähr das selbe sagen, wo füllst du 'statische Gruppe selectedGroup;' –