我有一个Swing GUI的一个运行按钮用下面的代码更新文本区域摆动的Java
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();
}
我希望让用户知道网站被抓取,这可能需要很长的时间。但是,在crawl.CrawlerInit和crawl.runCrawler完成之后,staticLinkTextArea.append才会生效。我如何强制它先发生?
您应该在staticLinkTextArea上调用“invalidate()”来强制重绘。同时考虑将抓取工具放入“invokeLater”调用中。您肯定会在堆栈溢出中找到示例。 –
@ AngelO'Sphere:不,'invalidate()'在这里不起作用,'repaint()'也不会。 invalidate方法只适用于Swing布局管理器,这里没有涉及,并且主要的底层问题是Swing事件线程正在被绑定。接下来你使用'invokeLater'的建议更糟糕,而且实际上很危险,因为那样你就可以保证长时间运行的代码在**上被称为**,这与你想要做的事情完全相反。 –
_“我怎样才能强迫它首先发生?” - 在运行抓取工具之前追加到TextArea。 _“我该如何做到这一点?” - @HovercraftFullOfEels打败了我。 PS:该死的你气垫船! DAMN YOUUUUUUUUUUU! (JK = P) – XenoRo