javafx UIスレッドでいくつかの重い持ち上げが行われている間に、進行状況インジケーター(回転していない状態)を表示する可能性はありますか?GUIスレッドの重い作業中にプログレスインジケーターを表示する必要があります
Backstory: Iveはかなり大きなtableViewをTitledPane(数秒かかる)に読み込まなければなりません。全体を遅らせるコマンドは、TitledPane.setContent(myTableView)です。 だから私は、少なくともこの時間の間にいくつかの読み込みアニメーションやインジケータを表示したいです。
だから、今は高価な呼び出しを行う前に、私のロードアニメーションを表示するには息をUIスレッドの十分な余地を与えるために、次の操作を行ってイム:
showMyLoadingAnimation();
PauseTransition pause = new PauseTransition(Duration.seconds(1));
pause.setOnFinished(event -> {
setContent(myTableView);
});
pause.play();
dismissMyLoadingAnimation();
これが示す進行状況インジケータを取得する動作しますが、一度UIのスレッドがsetContentで動作し始め、スタックしています。
iveは、アニメーションと一緒にレイオーバやダイアログを表示するためにスイングを使用している人が、別のスレッドで動作していて止まらないように見えましたが、まだ説得力のある解決策は見つかりませんでした。
EDIT: 問題の根本が見つかりました。 これで、テーブルにprefHeightPropertyが表示されているリストのサイズにバインドされています。JavaFX - Adapt TableView height to number of rows これは数週間前に働いて忘れました。
これは多くの時間がかかります。だから、バインディングを設定するときに時間を要することはありませんが、時間がかかることを示していますが、テーブルが大きくなっているときにuiスレッドに大きな問題があるようです。
jamesのおかげで、彼の答えはこの種の問題に遭遇する大部分の人にとって正しいものになります。
誰かがあそこにこの問題をコメントしてくださいすることができます:JavaFX - Adapt TableView height to number of rows (これは私は十分に担当者を持っていけない最初の質問ですので、まだコメントすること。)
'titledPane.setContent(myTableView);'現実的にどんなかなりの時間を割いてすることはできません。コード内で起こっている何かが時間を費やしています。おそらくデータをロードしています。時間のかかる作業(実際のUI作業ではない)をバックグラウンドスレッドに移行する必要があります。 –