繁体   English   中英

如何从另一个线程更新GUI?

[英]How to update the GUI from another thread?

我的JSF应用程序中的线程有问题,也许有人可以帮助我。

开始之后,我运行新线程,该线程正在执行一些后台操作。 该线程正在while(true) -loop中工作,但是当它无能为力时,它将调用wait() 它在循环中工作,因为在某些用户操作之后我必须调用notify()

现在,我要完成的事情是:我希望线程通知主线程该工作的一部分已经完成,因此我可以更新UI中的某些元素。 有任何想法吗?

我也想显示FacesMessage,但是不可能从另一个线程进行显示(即使使用Observer模式)

也许您可以使用ICEfaces服务器端推送进行异步后台工作来解决您的问题。
请访问http://auctionmonitor.icefaces.org/auctionMonitor/auctionMonitor.jsf ,了解推送技术的示例。

您的后台工作线程可以执行“推送”,这将“通知”某些页面进行更新(部分)并显示您的消息。

您可以使用JMS在正在运行的线程和托管Bean之间进行通信,但是对于其余部分,您将需要使用上述的一种推送技术。

如果足够的话,可以使用primefaces poll组件,否则,我现在所知道的唯一与jsf兼容的推送技术是icefaces push。 Primefaces即将推出一个新的基于websocket的推送组件,看起来真的很棒,但是我不认为它会完成几个月(它出现在最新快照中,但实际上并没有还有很多事情,仅适用于jetty8)。 您也可以使用彗星/大气库来做自己的事情,但是我自己看了一下就可以告诉您那些解决方案对您来说将是很多工作,几乎是一个自定义实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM