[英]Adding items to ListView in JavaFx… threading?
我正在嘗試在處理時向JavaFX中的ListView添加一個字符串,但它一直凍結我的GUI。
我嘗試了以下線程-但似乎無法使其用於ListView。
有人知道如何/擁有如何在處理數據時在JavaFX中更新ListView的示例嗎?
new Thread(new Runnable() {
@Override public void run() {
for (int i=1; i<=1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
recentList.getItems().add(Integer.toString(counter));
}
});
}
}}).start();
GUI掛起是因為您通過在線程中連續調用Platform.runLater()
來阻止JavaFX應用程序線程。
您可以通過在for循環中添加sleep
語句來避免此quick fix
,從而執行quick fix
。
for (int i=1; i<=1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
recentList.getItems().add(Integer.toString(counter));
}
});
// Add Sleep Time
Thread.sleep(some milli seconds);
}
要使用更合適和更明智的方法,請使用AnimationTimer
,如下所示:
您可以在列表中添加這些字符串后進行動畫/ ui更新,或者僅使用一次(不建議使用)Platform.runLater:
Platform.runLater(new Runnable() {
for (int i=1; i<=1000000; i++) {
final int counter = i;
@Override public void run() {
recentList.getItems().add(Integer.toString(counter));
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.