From 5720ee74b041e1378740706e322046c5c6774299 Mon Sep 17 00:00:00 2001 From: woodser <13068859+woodser@users.noreply.github.com> Date: Wed, 5 Mar 2025 08:39:03 -0500 Subject: [PATCH] run trade charts view listeners on user thread to fix npe --- .../main/market/trades/TradesChartsView.java | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/desktop/src/main/java/haveno/desktop/main/market/trades/TradesChartsView.java b/desktop/src/main/java/haveno/desktop/main/market/trades/TradesChartsView.java index dee3591bc8..97fcce06d1 100644 --- a/desktop/src/main/java/haveno/desktop/main/market/trades/TradesChartsView.java +++ b/desktop/src/main/java/haveno/desktop/main/market/trades/TradesChartsView.java @@ -208,29 +208,29 @@ public class TradesChartsView extends ActivatableViewAndModel { + timeUnitChangeListener = (observable, oldValue, newValue) -> UserThread.execute(() -> { if (newValue != null) { model.setTickUnit((TradesChartsViewModel.TickUnit) newValue.getUserData()); priceAxisX.setTickLabelFormatter(getTimeAxisStringConverter()); volumeAxisX.setTickLabelFormatter(getTimeAxisStringConverter()); volumeInUsdAxisX.setTickLabelFormatter(getTimeAxisStringConverter()); } - }; - priceAxisYWidthListener = (observable, oldValue, newValue) -> { + }); + priceAxisYWidthListener = (observable, oldValue, newValue) -> UserThread.execute(() -> { priceAxisYWidth = (double) newValue; layoutChart(); - }; - volumeAxisYWidthListener = (observable, oldValue, newValue) -> { + }); + volumeAxisYWidthListener = (observable, oldValue, newValue) -> UserThread.execute(() -> { volumeAxisYWidth = (double) newValue; layoutChart(); - }; - tradeStatisticsByCurrencyListener = c -> { + }); + tradeStatisticsByCurrencyListener = c -> UserThread.execute(() -> { nrOfTradeStatisticsLabel.setText(Res.get("market.trades.nrOfTrades", model.tradeStatisticsByCurrency.size())); fillList(); - }; - parentHeightListener = (observable, oldValue, newValue) -> layout(); + }); + parentHeightListener = (observable, oldValue, newValue) -> UserThread.execute(this::layout); - priceColumnLabelListener = (o, oldVal, newVal) -> priceColumn.setGraphic(new AutoTooltipLabel(newVal)); + priceColumnLabelListener = (o, oldVal, newVal) -> UserThread.execute(() -> priceColumn.setGraphic(new AutoTooltipLabel(newVal))); // Need to render on next frame as otherwise there are issues in the chart rendering itemsChangeListener = c -> UserThread.execute(this::updateChartData); @@ -238,31 +238,34 @@ public class TradesChartsView extends ActivatableViewAndModel { - priceChart.setVisible(!showAll); - priceChart.setManaged(!showAll); - priceColumn.setSortable(!showAll); + UserThread.execute(() -> { + priceChart.setVisible(!showAll); + priceChart.setManaged(!showAll); + priceColumn.setSortable(!showAll); - if (showAll) { - volumeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amount"))); - priceColumnLabel.set(Res.get("shared.price")); - if (!tableView.getColumns().contains(marketColumn)) - tableView.getColumns().add(1, marketColumn); + if (showAll) { + volumeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amount"))); + priceColumnLabel.set(Res.get("shared.price")); + if (!tableView.getColumns().contains(marketColumn)) + tableView.getColumns().add(1, marketColumn); + + volumeChart.setPrefHeight(volumeChart.getMaxHeight()); + volumeInUsdChart.setPrefHeight(volumeInUsdChart.getMaxHeight()); + } else { + volumeChart.setPrefHeight(volumeChart.getMinHeight()); + volumeInUsdChart.setPrefHeight(volumeInUsdChart.getMinHeight()); + priceSeries.setName(selectedTradeCurrency.getName()); + String code = selectedTradeCurrency.getCode(); + volumeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amountWithCur", code))); + + priceColumnLabel.set(CurrencyUtil.getPriceWithCurrencyCode(code)); + + tableView.getColumns().remove(marketColumn); + } + + layout(); + }); - volumeChart.setPrefHeight(volumeChart.getMaxHeight()); - volumeInUsdChart.setPrefHeight(volumeInUsdChart.getMaxHeight()); - } else { - volumeChart.setPrefHeight(volumeChart.getMinHeight()); - volumeInUsdChart.setPrefHeight(volumeInUsdChart.getMinHeight()); - priceSeries.setName(selectedTradeCurrency.getName()); - String code = selectedTradeCurrency.getCode(); - volumeColumn.setGraphic(new AutoTooltipLabel(Res.get("shared.amountWithCur", code))); - - priceColumnLabel.set(CurrencyUtil.getPriceWithCurrencyCode(code)); - - tableView.getColumns().remove(marketColumn); - } - - layout(); return null; }); } @@ -286,14 +289,14 @@ public class TradesChartsView extends ActivatableViewAndModel { + currencyComboBox.setOnChangeConfirmed(e -> UserThread.execute(() -> { if (currencyComboBox.getEditor().getText().isEmpty()) currencyComboBox.getSelectionModel().select(SHOW_ALL); CurrencyListItem selectedItem = currencyComboBox.getSelectionModel().getSelectedItem(); if (selectedItem != null) { model.onSetTradeCurrency(selectedItem.tradeCurrency); } - }); + })); toggleGroup.getToggles().get(model.tickUnit.ordinal()).setSelected(true);