识别能够更新UI组件的线程

时间:2013-11-28 10:54:42

标签: java multithreading vaadin vaadin7

我在网上搜索了一些提示,但一无所获。也许我错了。

我的问题是:

如何确定当前正在执行的线程是否有资格修改UI组件?

这就是我现在为UI更新所做的事情:

UI.getCurrent().access(new Runnable() {
            @Override
            public void run() {
               //modify some ui
            }
        });

在某些情况下,我不必这样做,它可以立即在当前的线程中工作,但有时不会,我得到一个错误。 当我比较Runnable和Runnable外部的线程时 - 它完全相同= http-bio-8080-exec-10

从代码中我可以做些什么来了解这是调用UI.getCurrent()。access()的正确位置还是立即执行?

我尝试搜索线程中的差异查找:VaadinService.getCurrentResponse()VaadinService.getCurrentRequest(),但我没有看到任何规则或模式。

谢谢你的时间, 托马斯

1 个答案:

答案 0 :(得分:3)

我得到了Vaadin开发人员的回答:

JohannesDahlström写道:

  

如果有任何疑问,请使用UI.access - 它永远不会出错。

     

基本上,您不需要它的唯一地方(或其他一些锁定会话的方法)就是当您知道您正处于当前处理客户端请求的线程中时(例如,在组件事件侦听器中) )。如果你不知道是否是这种情况,例如在一个可以从事件监听器或后台工作线程调用的方法中,你应该做UI.access只是为了确定,或者只是简单地访问UI直接并在方法的合同中记录其调用者必须处理锁定。

来源:https://vaadin.com/forum#!/thread/4479235/4491237