让Eventhandler立即采取行动?

时间:2016-12-06 11:21:53

标签: java javafx event-handling

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

这是我的代码。 在Thread.sleep()被禁用时,我想在Button处执行某些操作。 但它一下子做了一切。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这是一个在不同线程上使用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();
});