javafx UI 스레드에서 일부 무거운 작업을 수행하는 동안 진행률 표시기가 (회전하지 않고 멈추지 않음) 표시 할 수 있습니까?GUI 스레드에서 많은 작업을하는 동안 ProgressIndicator를 실행해야합니다.
Backstory : 필자는 다소 큰 tableView를 TitledPane (몇 초 소요)에로드해야합니다. 모든 것을 지연시키는 명령은 TitledPane.setContent (myTableView)입니다. 그래서 적어도이 시간 동안 로딩 애니메이션이나 표시기를 보여주고 싶습니다.
그래서 지금 UI 스레드에게 비싼 호출하기 전에 내 로딩 애니메이션을 보여줄 호흡에 충분한 공간을 제공하기 위해, 다음을 수행 메신저 :
showMyLoadingAnimation();
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event -> {
setContent(myTableView);
});
pause.play();
dismissMyLoadingAnimation();
이 표시된 진행 표시기를 얻을 작동을하지만, 한 번 UI 스레드가 setContent에서 작동하기 시작합니다.
일부 사람들은 스윙을 사용하여 스누핑을 사용하여 애니메이션이나 대화 상자를 표시하여 다른 스레드에서 실행되고 멈추지는 않지만 보이지 않는 해결책을 찾지 못했습니다.
편집 : 좋아, 그 문제의 뿌리를 발견. 그래서 테이블에 prefHeightProperty가 표시되어있는 목록의 크기에 바인딩 된 표를 가져 왔습니다. JavaFX - Adapt TableView height to number of rows 그 일주일 전 일하고 잊었습니다.
많은 시간이 걸립니다. 그래서 바인딩을 설정할 때 호출 시간을 측정하는 데 시간이 많이 걸리는 것으로 나타 났지만, ui 스레드는 테이블이 커질 때 큰 문제가있는 것처럼 보입니다.
제임스 덕분에 그의 답변은 이런 종류의 문제에 부딪 치는 대부분의 사람들에게 올바른 답변이 될 것입니다.
사람은 거기에이 문제를 언급하시기 바랍니다 수 있습니다 JavaFX - Adapt TableView height to number of rows 을 백그라운드 스레드에서 실행하는 Task
에
'titledPane.setContent (myTableView) :
기본 개념은 같다. 코드에서 다른 일이 일어나고 있습니다. 아마 데이터를로드 중입니다. 시간 소모적 인 작업 (실제 UI 작업이 아닌)을 백그라운드 스레드로 옮겨야합니다. –