我的按钮有问题,因为它在第一次点击时无效。我必须点击两次,然后给出双重结果:
Button button = new Button("Click Me");
button.addClickListener(
new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
new Thread(new Runnable() {
@Override
public void run() {
DateChooser dateChooser = new DateChooser(new com.kopiright.xkopi.lib.type.Date(2013, 12, 9));
System.out.println(dateChooser.selectDate(com.kopiright.xkopi.lib.type.Date.now()).toString());
}
}).start();
}
}
);
DateChooser扩展了com.vaadin.ui.Panel类。
答案 0 :(得分:4)
Vaadin Button总是立竿见影,所以这不是问题所在。
问题在于您正在启动一个更新UI的外部线程,并且要查看外部线程对UI所做的更改,您应该使用pollig或push。在这种情况下,第二个按钮单击轮询对浏览器的更改。但在这种情况下,你可以删除线程:
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
DateChooser dateChooser = new DateChooser(new com.kopiright.xkopi.lib.type.Date(2013, 12, 9));
System.out.println(dateChooser.selectDate(com.kopiright.xkopi.lib.type.Date.now()).toString());
}
});
当使用外部线程更新Vaadin组件时,必须正确同步代码。
答案 1 :(得分:2)
你有没有理由为此创建一个新线程?
请注意,从线程修改GUI应该是同步的。
在vaadin的书中看一下:
11.16.3。从另一个线程访问UI
https://vaadin.com/de/book/vaadin7/-/page/advanced.push.html
安德烈