Здравствуйте!
Есть ли в jmix возможность заблокировать все элементы пользовательского интерфейса на время выполнения длительной операции (несколько секунд)?
Здравствуйте!
Есть ли в jmix возможность заблокировать все элементы пользовательского интерфейса на время выполнения длительной операции (несколько секунд)?
Здравствуйте @anastacia_gal,
По умолчанию все продолжительные операции блокируют интерфейс Jmix приложения, но вы можете запустить свою задачу в BackgroundTask'е
и запретить закрывать диалоговое окно:
Пример:
XML:
<button id="startProcessBtn" text="Start process"/>
Controller:
@Autowired
private Dialogs dialogs;
@Subscribe(id = "startProcessBtn", subject = "clickListener")
public void onStartProcessBtnClick(final ClickEvent<JmixButton> event) {
BackgroundTask<Integer, Void> task = new BlockTask();
dialogs.createBackgroundTaskDialog(task)
.withHeader("Locking the window")
.withText("Please wait!")
.withTotal(10)
.withShowProgressInPercentage(true)
.withCancelAllowed(false)
.open();
}
private class BlockTask extends BackgroundTask<Integer, Void> {
public BlockTask() {
super(10, TimeUnit.MINUTES, TaskDetailView.this);
}
@Override
public Void run(TaskLifeCycle<Integer> taskLifeCycle) throws Exception {
for (int i = 0; i <= 10; i++) {
Thread.sleep(1000);
taskLifeCycle.publish(i);
}
return null;
}
}
С Уважением,
Никита