0

javafx ui スレッドでいくつかの重い作業が行われている間に、(回転中、スタックしていない) 進行状況インジケーターを表示する可能性はありますか?

バックストーリー: かなり大きな 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 を使用してアニメーションと一緒にレイオーバーまたはダイアログを表示する人を見たことがありますが、まだ説得力のある解決策を見つけることができませんでした。

編集:OK、私は問題の根源を見つけました。そのため、次のように表示されるリストのサイズにバインドされたテーブル prefHeightProperty を取得しまし

それには多くの時間がかかります。そのため、バインディングを設定するときに呼び出しのタイミングを計っても、時間がかかることはわかりませんが、テーブルが大きくなると、UI スレッドに大きな問題があるようです。

ジェームズのおかげで、彼の答えは、この種の問題に遭遇したほとんどの人にとって正しいものになるでしょう.

誰かがこの問題にコメントしてください: JavaFX - テーブルビューの高さを行数に合わせてください (これは最初の質問なので、まだコメントするのに十分な担当者がいません)

4

1 に答える 1