0
在我的應用程序中,我加載一個包含數據的表。 在這個標籤中,一列來自一個web服務,它可以做出一些回答。 所以我把這個在池中的線程,以避免遮擋屏幕是這樣的:線程執行後刷新TableView
final ObservableList<StockListBean> list = FXCollections
.observableArrayList();
list.addAll(stocksListMService.getStocksListRunning());
stocksList.setItems(list);
final ExecutorService executor = Executors.newFixedThreadPool(4);
for (final StockListBean stockListBean : list) {
executor.execute(new Task<Float>() {
@Override
protected Float call() throws Exception {
logger.debug("In jfx task for {}", stockListBean.getCode());
((StockListRunningBean)stockListBean).setActualPrice(stocksListMService.getActualPrice(stockListBean.getCode()));
columnActualPrice.setVisible(false);
columnActualPrice.setVisible(true);
return 0f;
}
});
}
的線程以及執行和數據豆類以及設置,但我沒有達到刷新的tableView。 我嘗試快照中的代碼。我嘗試了很多在網上找到的其他方式,但沒有做任何事情,這個專欄非常空洞。
如果我保持線程循環,但不執行服務並設置默認值,則此列不爲空。
這是一個真正的屏幕刷新問題。
我該如何刷新?
謝謝。
我發現執行者不會拋出異常,只是關閉。如果您在try塊中包裝調用UI線程的方法,則可能會看到該錯誤。調試和查找線程錯誤的真正痛苦。 – brian
如果發生異常,處理它們的方法是向任務註冊'setOnFailed'處理程序:task.setOnFailed(new EventHandler(){...});' –
服務沒有異常拋出。我的stockListBean不是JFX可觀察的,因爲它被多個應用程序使用。我需要簡單的變量類型。該任務允許在FX應用程序線程中獲得線程。 – Kiva