jmix是否有类似setInterval方法

我希望在screen中有一个定时刷新的功能,如何实现呢?
类似
setInterval(callback, 500)

可以用后台任务实现。

比方说下面的代码(我是在项目的 MainScreen#onAfterShow 中添加的),每隔三秒钟会打印一个 “do task”:

    @Autowired
    protected BackgroundWorker backgroundWorker;

    private static boolean CANCEL_BG_TASK = false;
    private static int task_count = 0;

    @Subscribe
    public void onAfterShow(AfterShowEvent event) {
        screenTools.openDefaultScreen(
                UiControllerUtils.getScreenContext(this).getScreens());

        screenTools.handleRedirect();

        BackgroundTask<Integer, Void> task = new BackgroundTask<Integer, Void>(100) {
            @Override
            public Void run(TaskLifeCycle<Integer> taskLifeCycle) throws Exception {
                while (!CANCEL_BG_TASK) { // 只要不取消任务,就一直执行。
                    TimeUnit.SECONDS.sleep(3);
                    task_count++;
                    System.out.println("do task:"+task_count);
                    if(task_count == 6){
                        CANCEL_BG_TASK = true; // 你也可以用其他方式结束循环任务。
                    }
                }
                return null;
            }
        };

        BackgroundTaskHandler taskHandler = backgroundWorker.handle(task);
        taskHandler.execute();
    }

好的。谢谢。

我前面也是这样写的,但是我在执行任务后,获取了任务的result,导致线程卡住了。
如果是这种写法,必须不能在外面获取返回值。

画蛇添足了。

嗯嗯,文档中的例子用 taskLifeCycle.publish() 吐出循环任务执行的结果,然后在 progress() 里面处理结果,应该是需要用后台任务的几个生命周期方法才行。