Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Button Vaadin按钮设置启用(false)不';使不能_Button_Vaadin_Background Process_Vaadin7 - Fatal编程技术网

Button Vaadin按钮设置启用(false)不';使不能

Button Vaadin按钮设置启用(false)不';使不能,button,vaadin,background-process,vaadin7,Button,Vaadin,Background Process,Vaadin7,Vaadin newbie:当用户按下一个按钮时,我喜欢禁用它,这样他就知道他点击了它,并且后台正在进行一些工作。当(长)任务完成时,我想启用按钮 为此,我使用了两个线程(后台线程和工作线程),但由于某些原因,该按钮在任务结束时没有启用 换句话说,一旦单击,它将转到enabled(false)并不再返回。为什么?我怎样才能修好它 button.addClickListener(new ClickListener() { public void butto

Vaadin newbie:当用户按下一个按钮时,我喜欢禁用它,这样他就知道他点击了它,并且后台正在进行一些工作。当(长)任务完成时,我想启用按钮

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

换句话说,一旦单击,它将转到enabled(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();   
        }
    });

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


否则,您需要启用服务器推送(@push),并记住在更新UI之前在后台线程中使用UI.access()。请参见

您在后台线程中完成的工作可能会被Vaadin忽略,因为他继续生成Vaadin响应,并且不会等待您的后台线程完成。您可能需要启用Vaadin push(搜索google以获取示例)