Button Vaadin按钮设置启用(false)不';使不能
Vaadin newbie:当用户按下一个按钮时,我喜欢禁用它,这样他就知道他点击了它,并且后台正在进行一些工作。当(长)任务完成时,我想启用按钮 为此,我使用了两个线程(后台线程和工作线程),但由于某些原因,该按钮在任务结束时没有启用 换句话说,一旦单击,它将转到enabled(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
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以获取示例)