java - 当鼠标不在窗口上方时,如何在不卡住的情况下对 UI 进行动画处理?

标签 java animation javafx freeze

我正在构建一个带有一些必须旋转的形状的游戏,问题是,当鼠标从窗口出去时,它会停止动画,并在后台继续,因为当鼠标再次进入窗口时,它会继续在美好的时刻

我也尝试使用TimerTimerTask但同样的问题

我已经构建了一个精彩的最小且完整的示例来解释:

public class Tests extends Application {    
    public static void main(String[] args) {    launch(args);    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane pane = new BorderPane(); 
        pane.setPrefSize(300, 300);
        Arc arc = new Arc(150, 150, 50, 50, 0, 190.0);
        arc.setFill(Paint.valueOf("#f32f32"));
        Label label = new Label();
        pane.setCenter(arc);
        pane.setTop(label);
        primaryStage.setScene(new Scene(pane));
        primaryStage.show();
        primaryStage.centerOnScreen();

        Task<Void> task = new Task<Void>() {
            @Override
            protected Void call() throws Exception {
                try {
                    Thread.sleep(2000);
                    Platform.runLater(() -> label.setText("Start"));
                    for (int i = 0; i < 360 * 5; i++) {
                        arc.setRotate(i);
                        Thread.sleep(5);
                    }
                    Platform.runLater(() -> label.setText("Stop"));
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return null;
            }
        };    
        new Thread(task).start();
        task.setOnSucceeded(e -> { Platform.exit(); System.exit(0); });
    }
}

最佳答案

我认为您缺少用于轮换的 Platform.runLater:

for (int i = 0; i < 360 * 5; i++) {
    final int j = i;
    Platform.runLater(() -> arc.setRotate(j));
    Thread.sleep(5)
}

关于java - 当鼠标不在窗口上方时,如何在不卡住的情况下对 UI 进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50174310/

相关文章:

java - Udacity Sunshine 应用程序第 1 课

java - 使用 Java MVC 将图像上传到 MySql 数据库

iOS 快速 : change imageview image in the middle of rotation animation

javascript - 我们可以在 setInterval 函数中自动暂停 animate() 和resume() 吗?

java - 如何使 TreeView 中的 TreeItem 确认鼠标单击事件?

java - 如何在不改变时间的情况下改变时区?

java - 如何在Java中使用PrintWriter和File类?

javascript - 动画 DOM 元素交换

java - 打开应用程序时更改 tabpane javafx 中的选项 View

JavaFX - 如何向 StackPane 添加多个元素?