We need to delay that call as we might get executed at startup after
mailbox messages are applied where we iterate over out pending trades.
The closeDisputedTrade method would remove that trade from the list
causing a ConcurrentModificationException.
To avoid that we delay for one render frame.
The recent changes breaks current formatting radically and does not
lead to better results as it was before.
Before applying new changes, please test it with bigger classes to see
if the result is as intended.
Relative number of messages have been calculated against one random seed node. Now, these numbers are calculated against the total number of unique messages available on all seed nodes. Lets us judge whether seed nodes are in sync not only quantitatively but also qualitatively.
The controlsfx is a huge JavaFX components library (0.83MB as JAR).
Turns out, we only use a single component, the PopOver. Fortunately,
the PopOver is self-contained and easy to pull out from controlsfx.
This commit embeds the PopOver in the project and removes controlsfx
dependency. The embedded version is exactly the same as previously
used in the project, so no change in semantics should occur.
The reactfx was a 0.33MB dependency / 238 Java source files.
We only used it for FxTimer helper and to measure FPS in development mode.
The small FxTimer class got copied over into the project,
so there is no change in semantics.
The FPS measurement got replaced w/ com.sun.javafx.perf.PerformanceTracker,
an internal but long stable part of JavaFx. This is probably not a problem,
because it only concerns a rarely used, developer feature.
Remove the flawed pattern of returning 0 in a comparator when the sub-
field of one of the two inputs being compared is null or absent. This
violates the Comparator contract, since returning 0 or otherwise should
define an equivalence relation.
Use Comparator.nullsFirst(..) in the table column comparators instead,
to ensure consistent ordering when a cell is missing a value. This fixes
ill-defined and erratic behaviour in the underlying merge/insertion sort
of the table rows done by the FX library.
Don't return 0 in the case of a null 'this.id' field, as that violates
the Comparable contract and leads to inconsistent NPE throwing when the
arguments are swapped. Instead, just assume (reasonably) that the ID
field will never be null.