【问题标题】:Updating ProgressBar using custom listener (interfaces)使用自定义侦听器(接口)更新 ProgressBar
【发布时间】:2015-03-05 13:51:23
【问题描述】:

在我的应用程序中,我拥有的是一个持久的过程,它在服务器中处理一些演算(一些车辆的最佳路线等)。我想向用户显示一个进度条,指示进程的当前状态。

理论上,一切似乎都很容易。我的视图中有一个 ProgressBar 对象。这个进度条将通过一个监听器更新,它将被编写为一个普通的接口,比如 IProgressListener,其中一个方法称为 notifyProgress(float pValue)。当在服务器中生成新值(运行 calculate())时,将调用 notifyProgress()。在我看来,它将定义一个 IProgressListener 的实例,覆盖 notifyProggress(float pValue) 方法,该方法将执行 progressBar.setValue(pValue);东西。

不幸的是,在运行我的 webapp 时,进度条一直卡住,没有值更新,直到耗时过程完成。这是进度条快速前进到 100% 结束的时间

有人知道为什么会这样吗?

​在此先感谢您。

编辑

最后,我已经能够让它工作了。我已经替换了 IProgressListener 的用法,并实现了观察者模式。看起来很奇怪,我没有在 ui.access( () -> { //code here }); 之间包装 UI 更新。 sn-p(否则,如果在此处引入 UI 更改将不起作用)。

【问题讨论】:

    标签: interface progress-bar listener vaadin vaadin7


    【解决方案1】:

    vaadin 论坛上有一个帖子值得一读,很好地总结了这一点 - Updating UI from another thread

    Vaadin 由在 servlet 容器中运行的服务器端和在 Web 浏览器中运行的客户端组成。应用程序状态保持在服务器端,但在需要时由客户端发起通信,例如单击按钮时。

    由于HTTP是request-response,一般情况下服务器是无法随意向客户端发送数据的,除非直接请求服务器。有两种主要技术可以克服这个问题:

    1. 客户端轮询 - 客户端定期向服务器请求更新 - 例如,进度条的当前值是多少。这可以通过 vaadin refresher add-on 来实现。
    2. Server Push - 服务器保持与客户端的连接(例如使用WebSockets)在需要时及时联系客户端。

    请注意,上面提到的论坛帖子提到了使用推送的特殊 vaadin 插件,但从那时起,基于 Atmosphere Framework 的常规服务器推送成为 Vaadin 框架的一部分。虽然 websockets are supported 在所有现代浏览器中都存在,但代理或旧版浏览器可能会出现问题。如果 websocket 不可用,大气框架会提供各种替代的自动回退。

    【讨论】:

    • Vaadin Push 功能是内置的。无论如何,我遵循了本指南 vaadin.com/book/-/page/advanced.push.html 并且对我不起作用...... @Vojtech Ruzicka
    • 无论如何,我的 tomcat 告诉我异步已启用:2015 年 3 月 6 日上午 10:19:43 org.atmosphere.cpr.AtmosphereFramework info INFORMACIÓN:Atmosphere 正在使用异步支持:org.atmosphere.container .JSR356AsyncSupport 在容器下运行:Apache Tomcat/8.0.18 使用 javax.servlet/3.0 和 jsr356/WebSocket API
    • 你对 vaadin-push.jar 有依赖吗?你的 UI 上有 @Push 注释吗?您是否在 web.xml 部署描述符中定义了推送?
    • 我已经在 web.xml 和我的 UI 中定义了 Push(这里使用注释 @Push)。最后,我已经能够让它工作了。我已经替换了 IProgressListener 的使用,并实现了观察者模式。看起来很奇怪,我没有在 ui.access( () -> { //code here }); 之间包装 UI 更新。 sn-p (否则,如果在此处引入 UI 更改将不起作用)。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-07-25
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多