2017-01-31 5 views
0

Ich schrieb den Code, der alle Links auf einer Webseite zieht. Ich überprüfe mit Arraylist, um zu verhindern, dass der gleiche Link erscheint. Aber ich bekomme Stackoverflow-Fehler, wenn es zu viele Links auf der Website gibt. Ich behalte Links in Arraylist für den späteren Gebrauch. Wie vermeide ich diesen Stackoverflow-Fehler? Könnte die Ursache des Problems arraylist sein?Wie behebe ich StackOverflow Fehler?

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

können Sie versuchen, Entfernen Sie die Rekursion in Ihrer Methode und implementieren Sie sie iterativ. –

+0

was ist 'k' hier? 'Element link: linkler' macht keinen Sinn – nullpointer

+0

oder fügen Sie mehr RAM zu Ihrem process – XtremeBaumer

Antwort

1

Wenn taramaTuru ist DETAYLI Tarama

if (taramaTuru.equals("Detaylı Tarama")) wird immer wahr sein.

und damit für jeden Eintrag in linkleriTut rufen Sie wieder linkleriCek(linkleriTut.get(k), taramaTuru)

, die wieder nach der ersten Schleife werden sehen, dass (taramaTuru.equals("Detaylı Tarama")) == true und damit Ihre Methode hält sich wieder aufrufen und wieder, die in einem Stackoverflow führen

+0

Ich überprüfe es, ich habe es einfach nicht geschrieben. if (linkleriTut.size() == k) Pause; –