我有一個方法從數據庫讀取值並返回Map<Integer,String>.
此方法需要一些時間才能返回映射。JavaFX:在進程運行時禁用所有組件,並顯示進度指示器
直到時間值被讀取我想要一個進度指示器(只有加載環像指示器就足夠了,不需要進度條)在屏幕上顯示,所有其他組件應該被禁用,直到時間進度條是所示。
public void scanDevice() {
ObservableList<TextField> list = FXCollections.observableArrayList(vehicleId, vehicleName, deviceType,
offboardBroker1, offboardBroker2, postfixQueue, pKIServer);
editedValuesMap.clear();
// devicePlugged = true;
if (cbChooseProject.getSelectionModel().getSelectedItem() != null) {
try {
devicePlugged = dsAdapter.getAdapter();
if (devicePlugged) {
if (bScanDevice.isFocused()) {
readMap = new HashMap<Integer, String>();
//Process Start
readMap = dsAdapter.initScan();
//Process End
if (!readMap.isEmpty() && readMap != null) {
isWritten = true;
isDeviceSideEnabled();
editDeviceContents.setDisable(false);
vehicleId.setText(readMap.get(0));
vehicleName.setText(readMap.get(1));
deviceType.setText(readMap.get(2));
offboardBroker1.setText(readMap.get(3));
offboardBroker2.setText(readMap.get(4));
postfixQueue.setText(readMap.get(5));
pKIServer.setText(readMap.get(6));
lContentsSerialNo.setText(readMap.get(7));
}
}
}
你能告訴我這是什麼Thread.sleep(2000); 我是否需要計算我的方法所需的時間,然後在那段時間睡眠該線程,並且由於項目包含我必須使用BorderPane佈局。 我收到以下錯誤: 線程「線程-5」中的異常java.lang.IllegalStateException:不在FX應用程序線程上; currentThread = Thread-5 –
在這個例子中使用'Thread.sleep(2000);'只是因爲它是一個例子。如果沒有任何內容需要花費時間,那麼進度窗格在測試時不會顯示足夠長的時間。你不需要它。至於錯誤,你可以編輯問題在「Task」中包含這些行嗎?你需要在你自己的'Platform.runLater()'中放置改變FX節點和窗格的行。 –
Mathews,我添加了包含我的過程的代碼。該過程從設備a讀取的值顯示在UI上。 –