Warm tip: This article is reproduced from serverfault.com, please click

其他-让JavaFX等待并继续执行代码

(其他 - Make JavaFX wait and continue with code)

发布于 2014-10-19 18:55:23

基本上,我正在尝试使用JavaFX取得简短的效果。我有一个心的形状(由两个圆和一个多边形加在一起),可以使用double值改变大小p“标准尺寸”为p = 1.0;

我正在尝试给心脏增加抽气效果。我有方法pumpOnce()

public void pumpOnce(){
    p = p + 1;
    initHeart();
    //Here goes what ever it takes to make stuff working!!
    p = p - 1;
    initHeart();
}

initHeart()以...为基础p

我发现Thread.sleep();由于JavaFX中的线程原理,类似方法无法使用。

但是我可以用什么代替呢?

Questioner
Maverick283
Viewed
0
DaveB 2014-10-20 03:34:01

JavaFX动画可能是要走的路,但是如果你想在后台线程中滚动自己或执行其他更复杂的操作,则JavaFX中的“线程原理”并不难处理。

以下代码将暂停并更改标签中的值(全面披露,我正在重复使用为另一个问题编写的代码):

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloWorld extends Application {

    private static Label label;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        label = new Label();
        label.setText("Waiting...");
        StackPane root = new StackPane();
        root.getChildren().add(label);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();

        Task<Void> sleeper = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
                return null;
            }
        };
        sleeper.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
            @Override
            public void handle(WorkerStateEvent event) {
                label.setText("Hello World");
            }
        });
        new Thread(sleeper).start();
    }
}

基本的JavaFX后台工具是Task,任何实际执行任何操作的JavaFX应用程序都可能到处都是乱七八糟的东西。了解如何使用它们。