Java - Обновление статических переменных - PullRequest
0 голосов
/ 30 марта 2012

У меня есть два класса в Java, которые должны запускаться одновременно - класс Crawler (который в основном реализует веб-сканер и продолжает выводить URL-адреса при его обнаружении), и класс Indexer, который на данный момент,предполагается просто напечатать просканированные URL-адреса.

Для этого у моего класса Indexer есть очередь:

public static Queue<String> urls = new LinkedList();

А в функции toVisit () моего класса Crawler у меня есть следующее:

Indexer.urls.add( url ) // where url is a String

Crawler работает совершенно нормально, поскольку он распечатывает все URL-адреса, с которыми столкнулся, но по какой-то причине эти URL-адреса не добавляются в очередь в моем классе Indexer.Любая идея, почему это может иметь место?

Метод toVisit () из Crawler.java выглядит следующим образом:

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("=============");
    }

Код из моего класса Indexer:

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() );

}

1 Ответ

0 голосов
/ 30 марта 2012

Хорошо, я решил свою проблему, выполнив действия, предложенные BigMike.Я реализовал интерфейс Runnable в моих двух классах, а затем запустил эти два класса как потоки в основной функции нового третьего класса.

Спасибо всем за помощь!:)

...