更新文本区域Swing Java

Pho*_*666 1 java swing

我有一个带有以下代码的运行按钮的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才会生效.我怎么能强迫它先发生?

Hov*_*els 6

我想让用户知道该网站正在被抓取,这可能需要很长时间.但是,在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在方法名称中的使用确实让我担心,希望它们并不意味着您在这里使用静态方法.