2017-04-08 4 views
0

Ich möchte ein Future Multi Threading verwenden, aber ich habe einen Fehler: "kann nicht von Future in Future konvertieren", wenn ich den Executor.submit aufrufen (aufrufbar).Java Future Multithreading

package metier; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.concurrent.Callable; 
import java.util.concurrent.ExecutionException; 
import java.util.concurrent.ExecutorService; 
import java.util.concurrent.Executors; 
import java.util.concurrent.TimeUnit; 
import java.util.concurrent.TimeoutException; 
import org.jsoup.Connection; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 

import com.sun.corba.se.impl.orbutil.closure.Future; 

public class ScraperPages { 

private String search; 
private String location; 
private List<Resultat> resultats; 
private List<String> urls; 

public ScraperPages(String search, String location) { 
    this.search = search; 
    this.location = location; 
    this.resultats = new ArrayList<Resultat>(); 
} 

public void getUrls() { 

    String urlForPage = "https://www.pagesjaunes.fr/recherche/" + this.location + "/" + this.search; 
    String urlForInfos = "https://www.pagesjaunes.fr/annuaire/chercherlespros?quoiqui=" + this.search + "&ou=" 
      + this.location + "&page="; 
    urls = new ArrayList<String>(); 
    try { 
     Document doc = Jsoup.connect(urlForPage).userAgent("Mozilla").ignoreHttpErrors(true).timeout(10000).get(); 
     Elements divResult = doc.getElementsByClass("pagination-compteur"); 
     int index = divResult.text().indexOf("/"); 
     int nbPage = Integer.parseInt(divResult.text().substring(index + 2)); 
     for (int i = 1; i < nbPage + 1; i++) { 
      urls.add(urlForInfos + i); 
     } 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void ScrapUrls() throws InterruptedException { 
    Iterator<String> urlsIterator = urls.iterator(); 
    ExecutorService executor = Executors.newFixedThreadPool(10); 
    Map<Future, String> tasks = new LinkedHashMap<Future, String>(); 

    while (urlsIterator.hasNext()) { 
     String urlstr = urlsIterator.next(); 
     Callable<Resultat> callable = new Callable<Resultat>() { 
      public Resultat call() throws Exception { 
       return scrapeIndividualURL(urlstr); 
      } 
     }; 
     Future future = executor.submit(callable); 
     tasks.put(future, urlstr); 
    } 
    tasks.forEach((future, url) -> { 
      String content = future.toString(); 
    }); 
    executor.shutdown(); 
} 

public static Resultat scrapeIndividualURL(String urlstr) { 
    Resultat result = null; 
    try { 
     Document doc = Jsoup.connect(urlstr).userAgent("Mozilla").ignoreHttpErrors(true).timeout(10000).get(); 
     Elements divResult = doc.getElementsByClass("zone-bi"); 
     for (Element e : divResult) { 
      if (e.getElementsByClass("denomination-links").size() != 0) { 
       String nom = e.getElementsByClass("denomination-links").get(0).text(); 
       String adresse = e.getElementsByClass("adresse-container").get(0).getElementsByClass("adresse") 
         .text(); 
       Elements mainContactDiv = e.getElementsByClass("main-contact-container"); 
       String phone = ""; 
       String cellphone = ""; 
       for (Element el : mainContactDiv) { 
        if (el.getElementsByClass("tel-zone").size() != 0) { 
         Elements telZoneDiv = el.getElementsByClass("tel-zone"); 
         for (Element ele : telZoneDiv) { 
          Elements test = ele.children(); 
          for (int j = 0; j < test.size(); j++) { 
           if (j != 0) { 
            if (test.get(j - 1).text().equals(" Tél :")) { 
             phone = test.get(j).attr("title").toString(); 
            } 
            if (test.get(j - 1).text().equals(" Mobile :")) { 
             cellphone = test.get(j).attr("title").toString(); 
            } 
           } 
          } 
         } 
        } 
       } 
       result =new Resultat(nom,adresse,phone,cellphone); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return result; 
} 

/** 
* @return the search 
*/ 
public String getSearch() { 
    return search; 
} 

/** 
* @param search the search to set 
*/ 
public void setSearch(String search) { 
    this.search = search; 
} 

/** 
* @return the location 
*/ 
public String getLocation() { 
    return location; 
} 

/** 
* @param location the location to set 
*/ 
public void setLocation(String location) { 
    this.location = location; 
} 

/** 
* @return the resultats 
*/ 
public List<Resultat> getResultats() { 
    return resultats; 
} 

/** 
* @param resultats the resultats to set 
*/ 
public void setResultats(List<Resultat> resultats) { 
    this.resultats = resultats; 
} 

/** 
* @param urls the urls to set 
*/ 
public void setUrls(List<String> urls) { 
    this.urls = urls; 
} 

}

Ich verstehe nicht, was ich falsch mache. Kannst du mir helfen?

+2

'Import com.sun.corba.se.impl.orbutil.closure.Future;' - falsche Zukunft denke ich. –

+1

Ich denke, Joe hat Recht. Achten Sie darauf, welchen Import die IDE für Sie auswählt. Wenn es mehr als eine Klasse mit demselben Namen gibt, wählt sie stattdessen eine seltsame Klasse. – Carcigenicate

+0

oh ja das stimmt! Zu dumm. Entschuldigen Sie die Unannehmlichkeiten. – Erylis

Antwort

0

Bitte ersetzen

import com.sun.corba.se.impl.orbutil.closure.Future; 

mit

import java.util.concurrent.Future;