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

时间:2015-01-15 13:34:40

标签: java vaadin7 server-push

我在处理过程中使用了第二个线程,并希望从第二个线程更新进度条。但它并不适合我自己。它不会更新进度条,直到我手动点击按钮或在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");                
                    }
                });

1 个答案:

答案 0 :(得分:1)

您需要在Vaadin应用程序中启用push:

  1. 在项目中为vaadin-push添加依赖项

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-push</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    
  2. 定义支持异步通信的servlet,并向UI添加@com.vaadin.annotations.Push注释:

    @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) {
            ..
        }
    }
    
  3. 更多信息,例如here

    此外,必须像在代码中那样正确锁定外部线程对Vaadin组件(或容器)的所有访问。