第一次单击时按钮没有响应

时间:2013-12-10 15:12:48

标签: multithreading vaadin

我的按钮有问题,因为它在第一次点击时无效。我必须点击两次,然后给出双重结果:

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类。

2 个答案:

答案 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

安德烈