M
mrmiagi
Gast
Hallo, ich programmiere Gerade an einem Crawler und hoffe mir kann jemand helfen.
Für jeden Crawlprozess soll es einen Thread geben der sich eine gemeinsame Liste der Seiten teilt.
Code zum starten des Thread
Der Thread
Doch ich habe dann nachher keinen Zugriff mehr auf die Crawlerlist
bringt kein ergebniss, wenn ich aber im Thread darauf zu greife geht das.
Warum funktioniert das nicht? ich dachte mir ich übergebe ja eine referenz und bekomme die dann zurück.
Wäre für hilfe sehr dankbar.
Für jeden Crawlprozess soll es einen Thread geben der sich eine gemeinsame Liste der Seiten teilt.
Code zum starten des Thread
Code:
package client;
public class Crawler {
public Crawler(String url)
{
CrawlerList cl = new CrawlerList();
CrawlerListItem it = new CrawlerListItem(false, url);
CrawlerThread main = new CrawlerThread(it);
CrawlerThread.setCrawlerlist(cl);
main.start();
CrawlerThread.getCrawlerlist().print();
}
}
Der Thread
Code:
package client;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Enumeration;
import java.util.Vector;
public class CrawlerThread extends Thread{
private static CrawlerList crawlerlist;
private static int Instances = 0;
private CrawlerListItem it;
public CrawlerThread(CrawlerListItem it)
{
this.it = it;
}
public void run()
{
Instances++;
HTMLPage cursite = null;
//Seite crawlen
try {
cursite = new HTMLPage(new URL(it.getUrl()));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Aus jedem extrahierten Link ein CrawlerListItem machen und zur CrawlerList hinzufügen
Vector<String> internalLinks = cursite.getInternalLinks();
for(Enumeration el = internalLinks.elements(); el.hasMoreElements();)
{
String cururl = (String) el.nextElement();
crawlerlist.addItem(new CrawlerListItem(false, cururl));
}
//Seite als gecrawled marken
Instances--;
}
public static CrawlerList getCrawlerlist() {
return crawlerlist;
}
public static void setCrawlerlist(CrawlerList crawlerlist) {
CrawlerThread.crawlerlist = crawlerlist;
}
}
Doch ich habe dann nachher keinen Zugriff mehr auf die Crawlerlist
Code:
CrawlerThread.getCrawlerlist().print();
bringt kein ergebniss, wenn ich aber im Thread darauf zu greife geht das.
Warum funktioniert das nicht? ich dachte mir ich übergebe ja eine referenz und bekomme die dann zurück.
Wäre für hilfe sehr dankbar.