Vaadin 7 在执行后台线程后不刷新 UI(仅当它需要超过 5 分钟时)

Posted

技术标签:

【中文标题】Vaadin 7 在执行后台线程后不刷新 UI(仅当它需要超过 5 分钟时)【英文标题】:Vaadin 7 don't refresh UI after execution background thread (only if it takes more than 5 minutes) 【发布时间】:2013-04-30 13:44:28 【问题描述】:

我正在使用 Vaadin 7。在我的应用程序中有一个表格列表,用户可以选择一个或多个项目来详细说明。如果单击执行按钮,UI 组件将被禁用并启动两个线程: 第一个线程进行大量计算 UI 上的第二个线程更新进度指示器(使用 lock() 和 unlock() 方法)

在第一个线程结束时:

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

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

有人可以帮助我吗?

非常感谢

【问题讨论】:

【参考方案1】:

见https://vaadin.com/forum#!/thread/231272

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

在 Vaadin 7.1(尚未发布)中,这是可能的。详情请见https://vaadin.com/wiki/-/wiki/Main/Enabling+server+push。

【讨论】:

感谢您的回答。我真的不明白为什么只有在线程花费超过 5 分钟时才会发生这种情况。 @user2312187 抱歉,我没有看到进度指示器注释;使用进度指示器意味着客户端将被更新。我想 5 分钟与 Vaadin 7 Heartbeat (vaadin.com/book/vaadin7/-/page/…) 有关 - 但除此之外,我不确定。 你能解释一下 heartbeatInterval 的工作原理吗?我在web.xml中设置,例如:heartbeatInterval3600 然后呢?我刚刚尝试过这个配置:所有组件都被禁用,而只有表格保持禁用状态。 恐怕我做不到:我对 Vaadin 7 还很陌生。我建议您将您的问题提交给 Vaadin 论坛vaadin.com/forum,那里有更多知识渊博的人可以提供帮助. 我试了一个星期,但我无法发帖,因为 vaadin 论坛网站回复:DB 似乎有问题...【参考方案2】:

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

【讨论】:

以上是关于Vaadin 7 在执行后台线程后不刷新 UI(仅当它需要超过 5 分钟时)的主要内容,如果未能解决你的问题,请参考以下文章

在 Vaadin UI 上执行异步操作

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

Vaadin Flow:删除 PollListener

Vaadin 7:UI 与 Navigator+Views 的使用

APNG 在第二个页面刷新后不同步

向UI发送参数并使用Java / Vaadin更新UI