我目前使用的是 SwingWorker
以防止Swing GUI在进行一个需要一段时间才能完成的任务(Web Scraping)时挂起。此外,我还在调用 publish()
方法从 doInBackground()
来发送Interim数据块到进程方法,如下面的示例代码所示。然而,这给我带来了问题,因为进程方法是异步完成的,有时会被一个新的数据块覆盖,从而导致一些数据消失。是否可以告诉 doInBackground()
要等processpublish方法完成,确保数据按要求处理和使用后再继续,并可能覆盖之前的数据?
class validateSources extends SwingWorker<Void, Integer> {
@Override
protected Void doInBackground() throws Exception {
for (int i = 0; i < size; i++) {
//Do some webscraping here
//Publish the data to the process method
publish(webscrapingData);
}
}
@Override
protected void process(List<Integer> chunks) {
//Use WebscrapingData for something
Object webscraingData = chunks.get(0);
}
}
EDIT:
我注意到,我之前给出的细节并不充分。我目前遇到的问题是,从doInBackground()中发布的数据必须在doInBackground()中继续下一次迭代之前得到充分处理,这一点至关重要。因此,我正在寻找一种方法来确保在做下一次Webscraping迭代之前,process()中的代码完全完成。
阅读Swing教程中的以下部分 有中期结果的任务. 你会发现有一个声明说。
多次调用publish的结果通常会累积到一次调用process中。
Object webscraingData = chunks.get(0);
你只处理一个项目。
你需要对列表中的所有项目进行迭代。