Java 瓦丁7唐';t执行后台线程后刷新UI(仅当需要5分钟以上时)

Java 瓦丁7唐';t执行后台线程后刷新UI(仅当需要5分钟以上时),java,multithreading,vaadin,Java,Multithreading,Vaadin,我用的是瓦丁7。在我的应用程序中有一个表列表,用户可以选择一个或多个要详细说明的项目。如果单击“执行”按钮,则禁用UI组件并启动两个线程: 第一个线程执行繁重的计算 第二个线程更新UI上的进度指示器(使用lock()和unlock()方法) 在第一个螺纹的末端: 从数据库中删除项,删除并重新添加所有组件(启用)。这样可以确保刷新表数据 它工作得很好,但当一个长任务被处理时,UI并没有刷新,表也被禁用 有人能帮我吗 非常感谢参见 简言之,在Vaadin 6.0和7.0中,您不能将更改从非请求线程“

我用的是瓦丁7。在我的应用程序中有一个表列表,用户可以选择一个或多个要详细说明的项目。如果单击“执行”按钮,则禁用UI组件并启动两个线程: 第一个线程执行繁重的计算 第二个线程更新UI上的进度指示器(使用lock()和unlock()方法)

在第一个螺纹的末端:

从数据库中删除项,删除并重新添加所有组件(启用)。这样可以确保刷新表数据

它工作得很好,但当一个长任务被处理时,UI并没有刷新,表也被禁用

有人能帮我吗

非常感谢

参见

简言之,在Vaadin 6.0和7.0中,您不能将更改从非请求线程“推送”到浏览器。(有适用于v6的插件,但不适用于v7.0)


在Vaadin 7.1(尚未发布)中,这是可能的。有关更多详细信息,请参阅。

您可以使用像ProgressIndicator一样定期刷新的组件。在线程完成后禁用它。这对我很有用。

谢谢你的回答。我真的不明白为什么只有当线程花费的时间超过5分钟时才会发生。@user2312187对不起,我没有看到进度指示器注释;使用进度指示器意味着客户端将被更新。我想5分钟与Vaadin 7心跳有关()-但除此之外,我不确定。你能解释一下心跳间隔是如何工作的吗?我在web.xml中设置,例如:heartbeatInterval 3600,然后?我刚刚尝试过这个配置:所有组件都是禁用的,只有表保持禁用状态。我恐怕不行:我对Vaadin 7相当陌生。我建议你直接向Vaadin论坛提问,在那里更多有知识的人可能会提供帮助。我尝试了一周,但我无法发布,因为Vaadin论坛网站回复:DB似乎有问题。。。