3

我有此代码用于每 3 秒更新一次 vaadin 按钮的标题。

TimerTask tt = new TimerTask() {

    @Override
    public void run() {
        try {
            logger.debug("adding l to button's caption");
            btn.setCaption(eventsButton.getCaption() + "l");
        } catch (Exception ex) {
            logger.error(ex.getMessage());
        }
    }
};
Timer t = new Timer(true);
t.scheduleAtFixedRate(tt, 0, 3000);

但是,它不能改变按钮的标题,虽然它每 3 秒执行一次(由日志文件判断)。如何从另一个线程访问 vaadin 的 GUI 组件?

4

3 回答 3

2

有一个名为 ICEPush 的插件可以满足我的需要。

https://vaadin.com/directory#addon/icepush

于 2012-08-02T04:03:11.363 回答
1

对问题进行了相当全面的讨论,并且可以在此处找到各种解决方案;Redux:'vanilla' Vaadin 只是遵循用户发起的请求-响应范例。

您需要使用附加组件从服务器启动浏览器中的更改。

另外:从您自己的线程(与正常的请求线程相反)更新组件时,您应该在应用程序对象上同步 - 因为您可能会遇到“同步”错误。

于 2012-07-19T06:53:58.643 回答
0

由于 Vaadin 的工作方式,在服务器端进行的异步 UI 更改不会反映在客户端上。即使用户没有启动事务,刷新插件也可以进行 UI更改

final Refresher refresher = new Refresher();
refresher.setRefreshInterval(3000);
addComponent(refresher);

refresher.addListener(new RefreshListener() {    
    @Override
    public void refresh(final Refresher source) {
        try {
            logger.debug("adding l to button's caption");
            btn.setCaption(eventsButton.getCaption() + "l");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }
}
于 2013-04-06T00:56:40.100 回答