Я бы попытался создать новый поток, используемый для задержки времени.
package sample;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
public class Controller implements Runnable{
private volatile boolean isRunning = false;
private Thread timer;
private int delay = 2000;
@FXML
private Label label;
@FXML
private Button button;
private void start(){
timer = new Thread(this, "timer");
isRunning = true;
timer.start();
}
private void stop(){
isRunning = false;
}
private void interrupt(){
isRunning = false;
timer.interrupt();
}
@Override
public void run() {
int counter = 0;
while (isRunning) {
try {
++counter;
String text = "MyText" + counter;
Platform.runLater(() -> label.setText(text));
if (counter == 5) {
stop();
}
Thread.currentThread().sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Важно обновить метку согласно Platform.runLater()
- основной поток JavaFx является единственным потоком, которому разрешено обновлять объекты JavaFx.
Это - потому что Вы звоните
pp x.map
и передача блока к стр (который игнорирует его),
Как объяснено в Программировании книга Ruby
Фигурные скобки имеют высокий приоритет; сделайте имеет низкий приоритет
Так, эффективно, фигурные скобки связывают с вызовом функции, самым близким к ним (x.map), тогда как делают связывает с самым далеким далеко (стр). Это немного упрощенно, но это должно объяснить эту ситуацию