From 85e703cba54200b77391bed79f7d72c8b8185ddd Mon Sep 17 00:00:00 2001 From: fjc40 Date: Tue, 15 Aug 2017 23:10:32 +1200 Subject: [PATCH] RaceController/info table now makes a copy of the boat list, to avoid race conditions. #story[1095] --- .../main/java/visualiser/Controllers/RaceController.java | 8 +++++++- .../main/java/visualiser/model/VisualiserRaceState.java | 5 +---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java index be5b5cd1..3e4c1398 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/RaceController.java @@ -208,9 +208,15 @@ public class RaceController extends Controller { public void initialiseInfoTable(VisualiserRaceEvent race) { //Copy list of boats. - SortedList sortedBoats = new SortedList<>(race.getVisualiserRaceState().getBoats()); + ObservableList boats = FXCollections.observableArrayList(race.getVisualiserRaceState().getBoats()); + SortedList sortedBoats = new SortedList<>(boats); sortedBoats.comparatorProperty().bind(boatInfoTable.comparatorProperty()); + //Update copy when original changes. + race.getVisualiserRaceState().getBoats().addListener((ListChangeListener.Change c) -> Platform.runLater(() -> { + boats.setAll(race.getVisualiserRaceState().getBoats()); + })); + //Set up table. boatInfoTable.setItems(sortedBoats); diff --git a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java index 588c0816..b1767cd5 100644 --- a/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java +++ b/racevisionGame/src/main/java/visualiser/model/VisualiserRaceState.java @@ -183,10 +183,7 @@ public class VisualiserRaceState extends RaceState { boat.setCurrentLeg(getLegs().get(0)); - Platform.runLater(() -> { - existingBoats.add(boat); - setPlayerBoat(); - }); + existingBoats.add(boat); }