2016-12-06 51 views
1
private void run(ActionEvent event) throws InterruptedException { 
button.setDisabled(true); 
Thread.sleep(3000); 
button.setDisabled(false); 
} 

這是我的代碼。 我想在Thread.sleep()的地方做點什麼,而Button被禁用。 但它一次做所有事情。 有人可以幫忙嗎?讓Eventhandler立即行動?

+0

什麼是您要執行的「某事」?它應該運行在一個單獨的線程?它會持續多久? – DVarga

回答

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(); 
}); 
+0

使用'Task'似乎在這裏有點矯枉過正......你可以使用'Thread',因爲除了'onSucceeded'外,你沒有使用'Task'的任何好處,這可以通過第二個'Platform來完成。 runLater'以及... – fabian

+0

這真的取決於應該完成的問題的「某些事情」。也許進展必須顯示,也許不是。不知道確切的要求,很難提供「最好」的解決方案(這就是爲什麼我首先在​​評論中提問:))。對於我提出的這個愚蠢的例子,我可以同意你的看法。 – DVarga