Я столкнулся с потенциальной ошибкой погони.Я использую javafx TableView для отображения моих данных, и я периодически получаю запрос на обновление извне, который вызывает мою функцию обновления.У меня также есть некоторые слушатели, которые выполняют такие вещи, как обработка событий mousedrag и т. Д. Я хочу сделать что-то вроде этого:
private void handleEvent(){
TableView.setRowFactory(new Callback<TableView<MyModel>, TableRow<MyModel>>(){
public TableRow<MyModel> call(TableView<MyModel> p) {
final TableRow row = new TableRow();
row.setOnDragDetected(new EventHandler<MouseEvent>(){
public void handle(){
//implement some kind of lock to prevent receiving data update
}
}
row.setOnMouseDragExited(new EventHandler<MouseDragEvent>(){
//release lock to accept update
}
}
}
//this method is being called externally periodically
public void updateModel(MyModel model){
//this won't work because it will skip entirely if it's locked,
//I want it to instead run later when lock is released
if (!locked){
this.model = model;
}
}
Я сделал быстрый обходной путь, используя Boolean для блокировки и разблокировки, какпоказанный в методе updateModel, проблема в том, что он потеряет некоторые обновленные данные, потому что он полностью пропущен ... вместо этого я хочу, чтобы он запускался позже, когда снята блокировка ... как я могу реализовать этот вид механизма блокировки и запустить функцию позже?
Изменить: почему я подозреваю, что это потому, что мои слушатели манипулируют и получают данные таблицы ... в то время как данные постоянно обновляются, я не уверен, что это приводит к разрыву моей таблицы.