更新文本区域Swing Java

时间:2015-11-04 17:55:44

标签: java swing

我有一个带有以下代码的运行按钮的Swing GUI

int middle = ( right + left ) / 2 ;

我想让用户知道该网站正在被抓取,这可能需要很长时间。但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效。我怎么能强迫它先发生?

1 个答案:

答案 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确实让我担心,并且希望它们并不意味着您在这里使用静态方法。