我有一个带有以下代码的运行按钮的Swing GUI
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);
crawl.runCrawler();
staticLinkTextArea.append("Building Complete Searching for Static Links \n");
crawl.runListURL();
}
Run Code Online (Sandbox Code Playgroud)
我想让用户知道该网站正在被抓取,这可能需要很长时间.但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效.我怎么能强迫它先发生?
我想让用户知道该网站正在被抓取,这可能需要很长时间.但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效.我怎么能强迫它先发生?
你的是在Swing事件线程上运行长时间运行代码的经典示例,从而冻结该线程.解决方案与以往一样:在后台线程(如a 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");
}
Run Code Online (Sandbox Code Playgroud)
您static在方法名称中的使用确实让我担心,希望它们并不意味着您在这里使用静态方法.