2013-10-03 2 views
-2

Мое приложение будет анализировать XML-файл с моего веб-сервера, а затем загружать файлы. Мое приложение получит содержимое «URL» из XML-файла и загрузит его с помощью FileUtils Common-IO. Моя проблема в том, как я узнаю, что мой процесс загрузки завершен или нет. В моем XML-файле много «URL».Как проверить, завершен ли процесс загрузки

Вот какая-то часть моего кода:

private Proxy proxy = Proxy.NO_PROXY; 
    public void downloadLibrary() 
     { 
      System.out.println("Start downloading libraries from server..."); 
      try 
      { 
       URL resourceUrl = new URL("http://www.example.com/libraries.xml"); 
       DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder db = dbf.newDocumentBuilder(); 
       Document doc = db.parse(resourceUrl.openConnection(proxy).getInputStream()); 
       NodeList nodeLst = doc.getElementsByTagName("Contents"); 
       for (int i = 0; i < nodeLst.getLength(); i++) 
       { 
        Node node = nodeLst.item(i); 

        if (node.getNodeType() == 1) 
        { 
         Element element = (Element)node; 
         String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue(); 
         File f = new File(launcher.getWorkingDirectory(), key); 
         downloadFile("http://www.example.com/" + key, f, "libraries"); 
        } 
       } 
      } 
      catch(Exception e) 
      { 
       System.out.println("Error was found when trying to download libraries file " + e); 
      } 

     } 

     public void downloadFile(final String url, final File path, final String fileName) 
     { 
      SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() 
      { 
       @Override 
       protected Void doInBackground() throws Exception 
       { 
        launcher.println("Downloading file " + fileName + "..."); 
        try 
        { 
         URL fileURL = new URL(url); 
         ReadableByteChannel rbc = Channels.newChannel(fileURL.openStream()); 
         FileOutputStream fos = new FileOutputStream(path); 
         fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 
        } 
        catch(Exception e) 
        { 
         System.out.println("Cannot download file : " + fileName + " " + e); 
        } 
        return null; 
       } 
       @Override 
       public void done() 
       { 
        System.out.println(fileName + " had downloaded sucessfully"); 

       } 
      }; 
      worker.execute(); 
     } 
+0

Пожалуйста, укажите код, который вы пробовали в своем запросе. –

ответ

0

Если вы отправляете каждую загрузку с одним потоком, который я рекомендую, Вы severals возможности.

Использование Future и FutureTask, чтобы подождать, пока все потоки не будут выполнены.

Чтобы использовать thread.join(), подождите, пока поток не остановится.

+0

Пример, пожалуйста? – Jeremy

+0

Ненавижу ленивых людей: S – RamonBoza

+0

@RaminBoza Ха-ха-ха, ты тот, кто ленив. Вы не хотите публиковать пример кода. Но неважно, я попробую это сам :) – Jeremy

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