我有更新vaadin按钮的标题每3秒这段代码。
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组件从另一个线程?
有一个名为ICEPush这不正是我需要的插件。
https://vaadin.com/directory#addon/icepush
问题和各种解决方案的合理全面的讨论,可以发现这里 ; 终极版:“香草” Vaadin简单地遵循用户发起的请求 - 响应范例。
你需要使用一个附加的启动从服务器浏览器中的变化。
旁白:你应该从你自己的线程更新组件时(而不是正常的请求线程)的应用对象的同步操作 - 因为你可能会得到“同步”的错误。
由于Vaadin的工作方式,在服务器端做异步用户界面的变化不会反映在客户端上。 在复习插件能够使用户界面的变化,即使用户不启动事务。
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());
}
}
}