java - 让事件处理程序立即采取行动?

标签 java javafx event-handling

private void run(ActionEvent event) throws InterruptedException {
button.setDisabled(true);
Thread.sleep(3000);
button.setDisabled(false);
}

这是我的代码。 当 Button 被禁用时,我想在 Thread.sleep() 的地方做一些事情。 但它同时完成所有事情。 有人可以帮忙吗?

最佳答案

这是一个使用 Task 的示例在不同的线程上执行操作。

Button b = new Button("Button!");
b.setOnAction(e -> {
    b.setDisable(true);
    Task<Void> task = new Task<Void>(){
        @Override
        protected Void call() throws Exception {
            Platform.runLater(() -> b.setText("Modified text")); // Use Platform.runLater here to modify the scene graph
            Thread.sleep(3000); 

            return null;
        }
    };

    task.setOnSucceeded(v -> {
        System.out.println("Succeed");
        b.setText("Button!");
        b.setDisable(false);
    });

    Thread thread = new Thread(task);
    thread.setDaemon(true);
    thread.start();
});

关于java - 让事件处理程序立即采取行动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40994137/

相关文章:

java - Spring 和 Hibernate 的事务管理使非 Activity 事务成为可能

java - Scene Builder 无法打开 FXML 文件

javafx 组合框下拉菜单从屏幕边缘消失

javascript - 为什么 .change() 不起作用?

java - 健全性检查 : how are packages and modules are meant to be used together?

java - Spring boot,序列化和反序列化时 Jackson Json 问题

java - 使用 Scala 或 Java 进行 Base 64 编码

JavaFX 如何以编程方式更改 GridPane 行高

java - 在 JavaFX 中同时处理 KeyEvent 和 MouseEvent

java - Java 中是否可以有无限数量的类型参数?