2013-12-10 67 views
1

我有一個按鈕的問題,它不起作用的第一次點擊。我必須點擊兩次,然後出現雙重結果:按鈕沒有響應從第一次點擊

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

哇,但我從來沒有改變setImmediate,謝謝nexus – AmiraGL

回答

2

是否有理由爲此創建一個新線程?

請注意,從線程修改GUI是同步的。

查看書中的vaadin:

11.16.3。從另一個線程

https://vaadin.com/de/book/vaadin7/-/page/advanced.push.html

安德烈

+0

是線程的內部要求 – AmiraGL

+1

@AmiraGL這個要求是什麼原因。我想你對Vaadin如何編程有誤解。你有沒有嘗試刪除線程? –

4

Vaadin按鈕訪問UI總是立即使這裏不是問題。

問題是,您正在啓動一個外部線程,它更新了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組件,代碼必須正確同步。

相關問題