Vaadin按钮setEnabled(false)不启用

时间:2015-12-29 21:33:19

标签: button vaadin background-process vaadin7

Vaadin新手:当用户按下按钮时,我想禁用它,因此他知道他点击了它并且后台正在进行一些工作。当(长)任务完成后,我想启用该按钮。

为此,我使用2个线程(后台和工作)但由于某种原因,在任务结束时没有启用该按钮。

换句话说,一旦点击它就会启用(false)并且永远不会回来。为什么?我该如何解决?

        button.addClickListener(new ClickListener() 
    {
        public void buttonClick(ClickEvent event) 
        {
            Thread background = new Thread(new Runnable(){

                @Override
                public void run()
                {
                    Thread work = new Thread(new Runnable(){

                        @Override
                        public void run()
                        {
                            button.setEnabled(false);
                            try
                            {
                                Thread.sleep(2000); //long work here!
                            } catch (InterruptedException e)
                            { 
                                e.printStackTrace();
                            }

                            button.setEnabled(true); //doesn't enable at the end of the long work!
                        }});

                    work.start();
                    try
                    {
                        work.join();
                    } catch (InterruptedException e)
                    { 
                        e.printStackTrace();
                    }
                }});

            background.start();   
        }
    });

1 个答案:

答案 0 :(得分:3)

也许最好的方法是使用Button.setDisableOnClick(true)作为按钮,并直接在没有后台线程的事件处理程序中进行处理。这将向用户显示标准加载指示器,直到处理完成。

否则,您需要启用服务器推送(@Push)并记住在更新UI之前在后台线程中使用UI.access()。见https://vaadin.com/book/-/page/advanced.push.html