Здравствуйте!
Есть ли в 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;
        }
    }
С Уважением,
Никита