Platform.runLater () - как запустить несколько запускаемых элементов и получить значение - PullRequest
0 голосов
/ 02 февраля 2019

Мне нужно выполнить 3 запускаемых экземпляра в «последовательном», другими словами, по одному, но в том же потоке, и получить результат.

В настоящее время мой код:

SendCommandTask sendLogReadCommand = new SendCommandTask(methodNameGetLog);
    sendLogReadCommand.setOnSucceeded(eventLog -> {
        this.LogTemp = ((List<Log>) sendLogReadCommand.getValue()).get(0);
        SendCommandTask sendSpaceReadCommand = new SendCommandTask(methodNameGetSpace);
        sendSpaceReadCommand.setOnSucceeded(eventSpace -> {
            this.boxTemp = ((List<BoxLabellTs>) sendSpaceReadCommand.getValue()).get(0);
            SendCommandTask sendAllLabellTssReadCommand = new SendCommandTask(methodNameGetAllLabellTss);
            this.listLabellTssTemp = (List<BotLabellTs>) sendAllLabellTssReadCommand.getValue();
            this.composeBox();              
        });
    });
    Platform.runLater(sendLogReadCommand);

Есть ли способ запустить все с помощью только одной команды Platform.runLater и получить результат каждой задачи?

1 Ответ

0 голосов
/ 04 февраля 2019

Найдено! эта ссылка решает мою проблему:

приведенный ниже код является чистым и работает!

public void updateGui() {
final KeyFrame kf1 = new KeyFrame(Duration.seconds(0), e -> doFirstStuff());
final KeyFrame kf2 = new KeyFrame(Duration.seconds(1), e -> doSecondStuff());
final KeyFrame kf3 = new KeyFrame(Duration.seconds(2), e -> doThirdStuff());
final Timeline timeline = new Timeline(kf1, kf2, kf3);
Platform.runLater(timeline::play);}

можно использовать и так:

final Timeline timeline1 = new Timeline(kf1); final Timeline timeline2 = new Timeline(kf2); final Timeline timeline3 = new Timeline(kf3); SequentialTransition sequence = new SequentialTransition(timeline1, timeline2, timeline3); Platform.runLater(sequence::play);

...