我有一个GUI,并且GUI正在启动另一个线程(Java)。该线程正在启动正在爬网许多网站的类。现在,我想在GUI中显示已抓取了多少个网站,还剩下了多少个。我想知道什么是最好的解决方案。
第一个想法是在GUI中启动计时器,并定期询问搜寻器剩余了多少个。但是我想这很脏
然后,可以将GUI传递给搜寻器,并且每次就绪网站的数量发生变化时,它都将调用GUI方法。但是我认为这没有更好吗?
做这样的事情的最好方法是什么?
这取决于。
询问爬虫完成了多少工作不是一个坏主意。好处是您可以实际控制何时进行更新并可以平衡负载。
不利的一面是,这些信息可能很快就会过时,并且您可能永远也无法获得准确的结果,因为当您读取这些值时,搜寻器可能已经更改了它们。
您可以让搜寻器提供一个回调接口,GUI会注册该接口,并且当搜寻器更新其状态时,会回调给GUI。
这里的问题是UI可能会充斥结果,导致在尝试跟上时会滞后。同样,在搜寻器发出这些通知的同时,它并没有起作用...
(假设摇摆)
无论哪种情况,您都需要确保您对UI提出的任何想法都来自事件分发线程。这意味着,如果您使用回调方法,则返回的更新将来自搜寻器线程上下文。您将需要将它们与EDT重新同步。
在这种情况下,您可以简单地使用SwingWorker
提供了将更新同步回EDT的机制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句