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();
}
});
答案 0 :(得分:3)
也许最好的方法是使用Button.setDisableOnClick(true)作为按钮,并直接在没有后台线程的事件处理程序中进行处理。这将向用户显示标准加载指示器,直到处理完成。
否则,您需要启用服务器推送(@Push)并记住在更新UI之前在后台线程中使用UI.access()。见https://vaadin.com/book/-/page/advanced.push.html