Используйте JavaFX Animation Package.
Существует множество примеров в JavaFX Animation Tutorial, как указал Энди в своем комментарии.
И есть симпатичный пример running horse animation loop.
Ключ в том, что вы не спятите поток приложений JavaFX, и вам нужно освободить управление потоком JavaFX обратно в систему JavaFX каждый раз, когда вы что-то обновляете и хотите, чтобы он отображался. Анимационные классы JavaFX заботятся об этих вещах для вас, поэтому вам не нужно беспокоиться об этом. Если вы просто выполняете цикл, как в примере кода, из вашего вопроса, JavaFX будет просто отображать сцену после завершения цикла и никогда не увидит, что что-то произойдет.
Вот довольно скучный пример, в котором используется Timeline, чтобы эмулировать код C++ в вашем вопросе, чтобы переместить точку на пиксель каждые 400 миллисекунд.
import java.util.Date;
import javafx.animation.*;
import javafx.application.Application;
import javafx.event.*;
import javafx.scene.*;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
/** Simple JavaFX Animation Sample. */
public class AnimationSample extends Application {
private int x = 20;
private String status = "";
private final Circle dot = new Circle(20, 20, 3);
private final TimeCounter counter = new TimeCounter();
public static void main(String[] args) throws Exception { launch(args); }
@Override public void start(final Stage stage) throws Exception {
final Timeline timeline = new Timeline(
new KeyFrame(Duration.ZERO, new EventHandler() {
@Override public void handle(Event event) {
refreshScene();
}
}),
new KeyFrame(Duration.millis(400))
);
timeline.setCycleCount(Timeline.INDEFINITE);
stage.setScene(new Scene(new Group(dot), 50, 50));
stage.show();
counter.reset();
timeline.play();
}
private void refreshScene() {
gotoxy(x, 20);
status = "*****".equals(status) ? "*" : status + "*";
System.out.println(String.format("%7d", counter.elapsed()) + " ms " + x + " " + status);
if (x == 24) {
x = 20;
} else {
x++;
}
}
private void gotoxy(int x, int y) {
dot.setCenterX(x);
dot.setCenterY(y);
}
class TimeCounter {
private long start = new Date().getTime();
void reset() { start = new Date().getTime(); }
long elapsed() { return new Date().getTime() - start; }
}
}
У Google есть ответ, посмотрите класс временной шкалы http://docs.oracle.com/javafx/2/animations/basics.htm#CJAFADFJ –