我正在使用crawler4j在其上的一個爬蟲項目上工作,我有一個swing界面。我有兩種不同的情況,即controller.java(也包含SWING組件)和crawler.java。我試圖追加由crawler.java處理的輸出,並將其追加到也包含swing組件的控制器類中。我試圖將一個控制器類的實例添加到爬蟲類中,但擺動組件未顯示更新。更新不同類中的java swing組件
controller.java
//instantiate the crawler
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed("http://pastebin.com/");
controller.startNonBlocking(crawler.class, 1);
我也有在控制器類下面的方法來更新文本窗格:
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控制檯中正常打印。
看看[SwingWorker](http://docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html) –
如果你想訪問另一個類的任何組件,make它'公共靜態'和例如如果在其他類中有文本字段,可以直接訪問它'className.TextfieldName.setText(what ever);' – JBALI
@JBALI嗨,謝謝。但它不起作用。將文本窗格更改爲public static javax.swing.JTextPane outputPane。 – kenAu89