2017-04-08 52 views
0

我想用一个未来的多线程,但我有一个错误:“不能转换从未来的未来”时,我所说的executor.submit(赎回)。的Java多线程的未来

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; 
} 

}

我不明白我在做什么错。你可以帮帮我吗?

+2

'进口com.sun.corba.se.impl.orbutil.closure.Future更换

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

;' - 错误的未来,我认为。 –

+1

我认为乔的权利。注意IDE为您选择哪个导入。如果有超过1个同名的班级,它有时会选择一个奇怪的班级。 – Carcigenicate

+0

哦,是的,这是正确的!太傻。抱歉给你带来不便。 – Erylis

回答

0

import java.util.concurrent.Future;