gpt4 book ai didi

java - 更新不同类的 java swing 组件

转载 作者:行者123 更新时间:2023-12-02 04:07:15 25 4
gpt4 key购买 nike

我正在使用crawler4j开发一个爬虫项目,在它之上,我有一个swing界面。我有两种不同的情况,即controller.java(也包含SWING组件)和crawler.java。我正在尝试附加由crawler.java处理的输出,并将其附加到还包含swing组件的 Controller 类中。我尝试将 Controller 类的实例添加到爬虫类中,但 swing 组件未显示更新。

Controller .java

//instantiate the crawler
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed("http://pastebin.com/");
controller.startNonBlocking(crawler.class, 1);

我还在 Controller 类中使用以下方法来更新文本 Pane :

public void setTextOP(String t){
outputPane.setText(t);
}

在crawler.java中

public class crawler extends WebCrawler {

controller c;

public crawler(controller c) {

this.c = c;
}

@Override
public void visit(Page page) {

int docid = page.getWebURL().getDocid();
String url = page.getWebURL().getURL();
String domain = page.getWebURL().getDomain();
String subDomain = page.getWebURL().getSubDomain();
int parentDocid = page.getWebURL().getParentDocid();

System.out.println("Docid: " + docid);
System.out.println("URL: " + url);
System.out.println("Domain: '" + domain + "'");
System.out.println("Sub-domain: '" + subDomain + "'");

if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData)page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
List<WebURL> links = htmlParseData.getOutgoingUrls();

c.setTextOP(text);
}
}

非常感谢对此的一些建议。谢谢。

PS:文本输出在 IDE 控制台中打印正常。

最佳答案

您似乎正在尝试从另一个非 GUI 线程更新您的 UI 线程。为此,请使用 SwingUtilities.invokeLater 方法,该方法使用 Runnable 来更新 UI 线程:

SwingUtilities.invokeLater(new Runnable() {
public void run() {
YourClassInstance.setTextOP("text");
}
}
});

我没有你的布局的精确图像,但这应该可以解决问题。

如果您还进行其他 GUI 更改 - 例如删除元素等,请尝试重新验证和重新绘制您的布局,以便通知您的布局管理器 Swing 组件及其子组件中的数据“脏”。 checkout this question了解更多。

关于java - 更新不同类的 java swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34155285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com