사용자가 UI에서 버튼을 클릭 할 때 버튼을 숨기고 여러 작업을 수행하는 백그라운드 작업을 시작하고 싶습니다.
편집 : 다른 차단 작업이 시작되기 전에 버튼이 숨겨져 있는지 어떻게 확인합니까?
class startTask implements Callable<Void>{
@Override
public Void call() {
//.....Do a bunch of stuff.....
return null;
}
}
public void hitTheButton() throws ExecutionException, InterruptedException {
hideTheButton();
//this only happens first IF i remove the .get()
StartTask startTask = new StartTask();
ExecutorService ex = Executors.newSingleThreadExecutor();
Future<?> exFuture = ex.submit(startSyncTask);
exFuture.get();
//.... Now we can continue with the program....
}
public void hideThebutton(){
FadeTransition ft = new FadeTransition(Duration.millis(10), myButton);
ft.setFromValue(1);
ft.setToValue(0);
ft.setCycleCount(1);
ft.setAutoReverse(false);
}
나는 또한 .isDone()
쓸모없는 while 루프를 넣어 보았습니다 .
UI가 .get ()에 의해 차단된다는 것을 이해하지만 Executor를 인스턴스화하기 전에 hide 메서드가 완료되지 않는 이유는 무엇입니까?
당신은 다음과 같이 썼습니다.
UI가 .get ()에 의해 차단된다는 것을 이해하지만 Executor를 인스턴스화하기 전에 hide 메서드가 완료되지 않는 이유는 무엇입니까?
JavaFX UI는 호출하는 코드 "사이"에서 업데이트됩니다. 실제로 수행하는 작업은 전환의 일부인 숨기기, 활성화와 같은 변경을 실행하도록 JavaFX 런타임에 요청하는 것입니다. 런타임은 해당 노드에서 작업을 수행해야 함을 표시하지만 다음 UI 틱이 실행될 때까지 대기합니다.
당신 exFuture.get();
을 사용하면 다음 UI 틱이 실행되지 않으므로 사용자 인터페이스가 업데이트되지 않습니다. 동시성 프레임 워크 를 사용하는 경우 Task
다양한 상태 모멘트를 생성 하고 사용하여 버튼 노드를 조작 할 수 있습니다.
Button button;
Task<?> task;
task.setOnSucceeded(e -> showButton(button));
task.setOnFailed(e -> showButton(button));
hideButton(button);
executor.submit(task);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다