在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它卡住了。我看到有些人使用swing來顯示平移或對話的動畫只是爲了讓它在不同的線程中運行並且沒有卡住,但還沒有找到一個有說服力的解決方案。
編輯: 好的,我發現問題的根源。 所以我得到的表prefHeightProperty綁定到它顯示的列表大小,如下所示:JavaFX - Adapt TableView height to number of rows 在那個星期前做了,工作,忘記了它。
花費很多時間。所以雖然在設置綁定時計時調用並不表明需要大量時間,但當表變得越來越大時,ui線程似乎遇到了大問題。
感謝詹姆斯,他的回答對大多數遇到這種問題的人來說是正確的。
可有人請評論這個問題在那裏:JavaFX - Adapt TableView height to number of rows (因爲這是第一個問題,我沒有足夠的代表尚未就此發表評論。)在Task
'titledPane.setContent(myTableView);'實際上不可能採取任何可觀的時間。代碼中發生的其他事情正在花時間;可能會加載數據。您應該將耗時的工作(這不是實際的UI工作)轉移到後臺線程。 –