Ich habe zwei Klassen in Java, die zur gleichen Zeit ausgeführt werden müssen - Eine Crawler-Klasse (die im Grunde einen Web-Crawler implementiert und URLs beim Auftreten ausdruckt) und eine Indexer-Klasse. was ab sofort soll einfach die urls gecrawlt werden.Java - Aktualisieren statischer Variablen
Dafür hat meine Indexer Klasse Queue:
public static Queue<String> urls = new LinkedList();
Und in der toVisit() Funktion meiner Crawler Klasse, ich habe folgendes:
Indexer.urls.add(url) // where url is a String
Der Crawler arbeitet völlig gut, da es alle gefundenen URLs ausgibt, aber aus irgendeinem Grund werden diese URLs nicht zur Warteschlange in meiner Indexer-Klasse hinzugefügt. Irgendeine Idee, warum das der Fall sein könnte?
Die toVisit() -Methode von Crawler.java ist wie folgt:
public void visit(Page page) {
int docid = page.getWebURL().getDocid();
String url = page.getWebURL().getURL();
String domain = page.getWebURL().getDomain();
String path = page.getWebURL().getPath();
String subDomain = page.getWebURL().getSubDomain();
String parentUrl = page.getWebURL().getParentUrl();
System.out.println("Docid: " + docid);
System.out.println("URL: " + url);
System.out.println("Domain: '" + domain + "'");
System.out.println("Sub-domain: '" + subDomain + "'");
System.out.println("Path: '" + path + "'");
System.out.println("Parent page: " + parentUrl);
Indexer.urls.add(url);
System.out.println("=============");
}
-Code aus meiner Indexer Klasse:
public static Queue<String> urls = new LinkedList();
public static void main(String[] args)
{
while(urls.isEmpty())
{
//System.out.println("Empty send queue");
Thread.sleep(sleepTime);
}
System.out.println(urls.poll());
}
Bitte posten Sie die 'toVisit()' Methode – satoshi
laufen Sie zwei Threads dh: 1.Crawler Thread 2.Indexer Thread? – cherit
oder führen Sie den Crawler zufällig in einem Klassenlader und den Indexer in einem anderen? (z. B. zwei verschiedene Web-Anwendungen?) – BigMike