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

이것은 내 코드입니다. Button이 비활성화되어있는 동안 Thread.sleep()의 위치에서 무언가를하고 싶습니다. 하지만 모든 것을 즉시 처리합니다. 누군가 도움이 될 수 있습니까?Event Handler가 즉시 작동하게 만드시겠습니까?

+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'를 사용할 수 있습니다. 왜냐하면 두 번째'Platform에 의해 수행 될 수있는'onSucceeded'를 제외한'Task'의 이점을 사용하지 않기 때문입니다. runLater' ... – fabian

+0

정말해야 할 질문에서 "무언가"에 달려 있습니다. 어쩌면 진행 상황이 표시되어야 할 수도 있습니다. 정확한 요구 사항을 모른 채 "가장 좋은"솔루션을 제공하기가 어렵습니다. (그 이유는 내가 먼저 코멘트에 물었습니다 :)). 이 어리석은보기를 위해 나는 너와 동의 할 수 있었다. – DVarga

관련 문제