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

时间:2011-09-13 09:21:19

标签: java multithreading jsf

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

开始后我运行新线程,进行一些后台操作。这个线程在while(true) - 循环中工作,但是当没有任何东西时它可以调用wait()。它在循环中工作,因为我必须在用户操作后调用notify()

所以现在我要做的是:我希望线程通知主线程作业的一部分已经完成,所以我可以在UI中更新一些元素。有什么想法吗?

我还想显示FacesMessage,但是从另一个线程(甚至使用Observer模式)这样做是不可能的

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

如果这是足够的话,你可以使用primefaces poll组件,否则我现在所知道的唯一适用于jsf的推送技术就是icefaces push。 Primefaces推出了一个新的基于websocket的推送组件,它看起来真的很不错,但我不相信它会在几个月内完成(它出现在最新的快照中,但并不是真的做了很多,只适用于jetty8)。你也可以用彗星/大气库来做你自己的事情,但自己看了一下我可以告诉你这些解决方案对你来说很重要,几乎是一个自定义的实现。

相关问题