我不知道你的意思
“两者都是全局的”
.最接近全球范围的是
static
字段,并且没有一个字段声明为
静止的
。
但关于这个问题:
您正在初始化
FilteredData
字段,从而导致在执行构造函数之前执行赋值。这意味着
LoadEListingData
在分配之前执行
FilteredData = new FilteredList<>(EListingData);
出于这个原因
EListingData
仍然是
null
当时。但这是不允许的。
您需要更改此字段的初始化时间,例如,在使用
LoadEListingData
。
或者,您可以使用空
ObservableList
然后在
LoadEListingData
方法被调用:
private final ObservableList<DataHandler_ExamsListing> EListingData = FXCollections.observableArrayList();
private final FilteredList<DataHandler_ExamsListing> FilteredData = new FilteredList<>(EListingData);
private final SortedList<DataHandler_ExamsListing> sortedData = new SortedList<>(FilteredData);
@FXML
private void initialize() {
EListingTable.setItems(sortedData);
}
private void LoadEListingData(){
List<DataHandler_ExamsListing> data = new ArrayList<>();
try {
// prepare data for insert using single update
DBE.resultSet = DBE.statement.executeQuery("SELECT * FROM Exam"); // directly accessing static fields of a different class is a terrible idea since it violates the information hiding principle
while (DBE.resultSet.next()) {
data.add(new DataHandler_ExamsListing(DBE.resultSet.getInt("ExamID"),DBE.resultSet.getString("ExamName"),DBE.resultSet.getString("ExamDate"),DBE.resultSet.getString("ExamComment")));
}
} catch (SQLException e) {
e.printStackTrace(); // Never just ignore an exception unless it's expected
return;
}
// update data
EListingData.setAll(data);
}