2017-01-31 3 views
0

Я написал код, который тянет все ссылки на веб-странице. Я проверяю с помощью Arraylist, чтобы предотвратить появление такой же ссылки. Но я получаю ошибку stackoverflow, если на сайте слишком много ссылок. Я продолжаю ссылки в Arraylist для последующего использования. Как избежать этой ошибки stackoverflow? Может ли причина проблемы быть arraylist?Как разрешить ошибку StackOverflow?

StackOverFlow Error

static ArrayList<String> linkleriTut = new ArrayList();  

public void linkleriCek(String url, String taramaTuru) throws IOException{ 
    try { 
     Document doc = Jsoup.connect(url).get(); 
     Elements linkler = doc.select("a[href]"); 
     for (Element link : linkler) { 
     if (!linkleriTut.contains(link.attr("abs:href"))) { 
      linkleriTut.add(link.attr("abs:href")); 
     } 
     } 
    } 
} 
catch (Exception e) { 
} 
if (taramaTuru.equals("Detaylı Tarama")) { 
    while (k < linkleriTut.size()) { 
     k++; 
     linkleriCek(linkleriTut.get(k), taramaTuru); 
    } 
} 
+2

Вы можете попробовать удалить рекурсию в вашем методе и реализовать ее итеративно. –

+0

Что такое 'k' здесь? 'Element link: linkler' тоже не имеет смысла – nullpointer

+0

или добавляет больше бара к вашим процессам. – XtremeBaumer

ответ

1

Когда taramaTuru является Detaylı Tarama

if (taramaTuru.equals("Detaylı Tarama")) всегда будет истинным.

И, таким образом, для каждой записи в linkleriTut вы звоните снова linkleriCek(linkleriTut.get(k), taramaTuru)

, который после первого цикла снова видим, что (taramaTuru.equals("Detaylı Tarama")) == true и, таким образом, ваш метод продолжает называть себя снова и снова, которые приводят к StackOverflowError

+0

Я проверяю его, я просто не писал его. if (linkleriTut.size() == k) break; –

Смежные вопросы