我有一个带有以下代码的运行按钮的Swing GUI
int middle = ( right + left ) / 2 ;
我想让用户知道该网站正在被抓取,这可能需要很长时间。但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效。我怎么能强迫它先发生?
答案 0 :(得分:6)
我想让用户知道该网站正在被抓取,这可能需要很长时间。但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效。我怎么能强迫它先发生?
你的是在Swing事件线程上运行长时间运行代码的经典示例,从而冻结该线程。解决方案与以往一样:在后台线程中运行长时间运行的代码,例如new Thread(...)
或SwingWorker。
如,
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {
staticLinkTextArea.append("Building Site Map (this can take a while depending on depth) \n");
crawl.CrawlerInit("http://www.asquithnurseries.co.uk/", "asquithnurseries.co.uk",1);
new Thread(new Runnable() {
public void run() {
crawl.runCrawler();
crawl.runListURL();
}
}).start();
staticLinkTextArea.append("Building Complete Searching for Static Links \n");
}
您在方法名称中使用static
确实让我担心,并且希望它们并不意味着您在这里使用静态方法。