2015-12-08 51 views
0

我正在使用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控制檯中正常打印。

+0

看看[SwingWorker](http://docs.oracle.com/javase/8/docs/api/javax/swing/SwingWorker.html) –

+0

如果你想訪問另一個類的任何組件,make它'公共靜態'和例如如果在其他類中有文本字段,可以直接訪問它'className.TextfieldName.setText(what ever);' – JBALI

+0

@JBALI嗨,謝謝。但它不起作用。將文本窗格更改爲public static javax.swing.JTextPane outputPane。 – kenAu89

回答

2

看來你試圖從另一個非GUI線程更新你的UI線程。對於這個原因,使用SwingUtilities.invokeLater方法,它使用一個Runnable更新UI線程:

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

我沒有你的佈局的精確圖像,但是這應該做的伎倆。

如果您還在進行其他GUI更改(如刪除元素等),請嘗試重新驗證並重新繪製佈局,以便通知佈局管理器數據在您的swing組件及其子項中「髒」。 查看this question瞭解更多。

+1

嗨,非常感謝!奇蹟般有效。我很興奮擺動,花了相當長的時間試圖解決這個問題。再次感謝!乾杯。 – kenAu89

+0

不客氣,我很高興幫助。 :) –