vaadin服务器从另一个线程推送

wdebmtf2  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(256)

我正在处理中使用第二个线程,希望从第二个线程更新进度条。但这对我一点用都没有。它不会更新进度条,直到我手动单击按钮或在ui上执行服务器事件。

UI.getCurrent().access(new Runnable() {
                    @Override
                    public void run() {
                        //update the UI as in your code above
                        progressBar_1.setValue(new Float(progress));
                        Notification.show("Preprocessing - 1 Done");                
                    }
                });
soat7uwm

soat7uwm1#

您需要在vaadin应用程序中启用push:
向项目中的vaadin push添加依赖项

<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-push</artifactId>
    <version>${vaadin.version}</version>
</dependency>

为支持异步通信的servlet定义并添加 @com.vaadin.annotations.Push ui注解:

@Push
public class MyUI extends UI {

    @WebServlet(value = "/*", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = false, ui = PushtestUI.class)
    public static class Servlet extends VaadinServlet {
    }

    @Override
    protected void init(VaadinRequest request) {
        ..
    }
}

更多信息,例如这里。
此外,所有从外部线程访问vaadin组件(或容器)的权限都必须像在代码中一样正确锁定。

相关问题