Vaadin 服务器从另一个线程推送
Vaadin server push from another thread
我在我的处理中使用了第二个线程,并且想从我的第二个线程更新进度条。但它对我自己不起作用。在我手动单击按钮或在 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");
}
});
您需要在您的 Vaadin 应用程序中启用推送:
在你的项目中添加对 vaadin-push 的依赖
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-push</artifactId>
<version>${vaadin.version}</version>
</dependency>
为支持异步通信的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) {
..
}
}
更多信息,例如 here。
此外,所有从外部线程访问 Vaadin 组件(或例如容器)的权限都必须像您在代码中所做的那样正确锁定。
我在我的处理中使用了第二个线程,并且想从我的第二个线程更新进度条。但它对我自己不起作用。在我手动单击按钮或在 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");
}
});
您需要在您的 Vaadin 应用程序中启用推送:
在你的项目中添加对 vaadin-push 的依赖
<dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-push</artifactId> <version>${vaadin.version}</version> </dependency>
为支持异步通信的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) { .. } }
更多信息,例如 here。
此外,所有从外部线程访问 Vaadin 组件(或例如容器)的权限都必须像您在代码中所做的那样正确锁定。