基本上,我正在尝试使用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中的线程原理,类似方法无法使用。
但是我可以用什么代替呢?
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应用程序都可能到处都是乱七八糟的东西。了解如何使用它们。
谢谢,正是我所需要的!