我有一个方法从数据库读取值并返回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上。 –