@nuclearthinking

Как вернуть значение в основной поток и отобразить его?

Доброго времени суток

проблема в следующем
пытаюсь прикрутить своему небольшому приложению прогресс бар

в классе контроллере при клике на кнопку выполняется следующий код
public void calculate() {
        button.setDisable(true);
        new Thread(this::calculationStart).start();
        button.setDisable(false);
    }


new Thread(this::calculationStart).start();
тут в отдельном потоке вызывается следующий метод

protected void calculationStart() {
        double progress = 0.0;
        String s1 = steamIdTextArea.getText();
        int accountId = Integer.parseInt(s1);
        MatchHistory history = null;
        try {
            try {
                history = api.getMatchHistory(MATCHES_AMOUNT, accountId);
            } catch (IOException e) {
                resultText.setText(e.getMessage());
            }
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
            System.out.println("Task can't be completed");
            throw new RuntimeException("Closing ...");
        }
        List<Long> matchesList = calc.matchIdList(history);
        ArrayList<MatchDetails> matchDetailses = new ArrayList<>();
        for (Long matchId : matchesList) {
            try {
                progress += 0.05;
                matchDetailses.add(api.getMatchDetails(matchId));
                final double finalProgress = progress;
                Platform.runLater(() -> progressBar.setProgress(finalProgress));
            } catch (IOException e) {
                progress += 0.05;
                final double finalProgress = progress;
                resultText.setText(e.getMessage());
                Platform.runLater(() -> progressBar.setProgress(finalProgress));
            }
        }
        List<int[]> scoreList = calc.playerScore(matchDetailses, accountId);
        double averageKDA = calc.averageKda(scoreList);
        resultText.setText("Average KDA for last " + MATCHES_AMOUNT + " rating games = " + averageKDA);
    }


в код вникать я думаю не совсем обязательно, проблема в последней строчке этого метода

в ней я пытаюсь обновить текст из главного потока, но это само собой реализовать не получается, отсюда вопрос, как же мне после выполнения этого метода, обновить текст в UI из главного потока ?
  • Вопрос задан
  • 392 просмотра
Решения вопроса 1
@nuclearthinking Автор вопроса
Почти сразу дошло до меня решение
может кому пригодится в будущем

нужно последнюю строку обернуть в Platform.runLater();

работающий метод будет выглядеть вот так

protected void calculationStart() {
        double progress = 0.0;
        String s1 = steamIdTextArea.getText();
        int accountId = Integer.parseInt(s1);
        MatchHistory history = null;
        try {
            history = api.getMatchHistory(MATCHES_AMOUNT, accountId);
        } catch (RuntimeException e) {
            System.out.println(e.getMessage());
            System.out.println("Task can't be completed");
            throw new RuntimeException("Closing ...");
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<Long> matchesList = calc.matchIdList(history);
        ArrayList<MatchDetails> matchDetailses = new ArrayList<>();
        for (Long matchId : matchesList) {
            try {
                progress += 0.05;
                matchDetailses.add(api.getMatchDetails(matchId));
                final double finalProgress = progress;
                Platform.runLater(() -> progressBar.setProgress(finalProgress));
            } catch (IOException e) {
                progress += 0.05;
                final double finalProgress = progress;
                resultText.setText(e.getMessage());
                Platform.runLater(() -> progressBar.setProgress(finalProgress));
            }
        }
        List<int[]> scoreList = calc.playerScore(matchDetailses, accountId);
        double averageKDA = calc.averageKda(scoreList);
        Platform.runLater(() -> resultText.setText("Average KDA for last " + MATCHES_AMOUNT + " rating games = " + averageKDA));
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы