簡體   English   中英

如何在javax.swing.Timer中分離任務?

[英]how to separate tasks in javax.swing.Timer?

我正在編寫程序以完成3個任務:

  1. 使用ftp將xml文件從遠程文件夾下載到本地文件夾。
  2. 讀取並處理文件。
  3. 從本地文件夾中刪除文件。

我使用javax.swing.Timer定期重復該操作。

我想阻止任務2開始直到任務1完成,並阻止任務3開始直到任務2完成。

我該如何實現

謝謝

這是我的代碼:

new javax.swing.Timer(TIMER_DELAY, new ActionListener() {
public void actionPerformed(ActionEvent e) {

   FTPFileDownloader ftpdown = new FTPFileDownloader();
   try {
    ftpdown.downloadFiles(Configuration.array.get(0), Configuration.array.get(3), Configuration.array.get(4), Configuration.array.get(5), Configuration.array.get(6));
} catch (IOException e2) {
    // TODO Auto-generated catch block
    e2.printStackTrace();
}

  XmlToDB xmldb=new XmlToDB();   
        ReadFilesFromFolder readfiles=new ReadFilesFromFolder();
        File file=new File("C:\\FTP_CLIENT_DIRECTORY\\");
        ArrayList<File> output=readfiles.listFilesForFolder(file, true, "");
        ArrayList<String> ss = null;
        try {
            ss = xmldb.XMLtoString(output);
            int nbrechang=xmldb.insert(ss);
        } catch (IOException | SAXException | ParserConfigurationException E) {
            // TODO Auto-generated catch block
            E.printStackTrace();
        }


        try {
            FileUtils.cleanDirectory(file);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } 

            }
      }
  }

 }).start();   

很簡單,您可以使用單線程執行器來執行請求,例如...

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
    @Override
    public void run() {
        FTPFileDownloader ftpdown = new FTPFileDownloader();
        try {
            ftpdown.downloadFiles(Configuration.array.get(0), Configuration.array.get(3), Configuration.array.get(4), Configuration.array.get(5), Configuration.array.get(6));
        } catch (IOException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        XmlToDB xmldb = new XmlToDB();
        ReadFilesFromFolder readfiles = new ReadFilesFromFolder();
        File file = new File("C:\\FTP_CLIENT_DIRECTORY\\");
        ArrayList<File> output = readfiles.listFilesForFolder(file, true, "");
        ArrayList<String> ss = null;
        try {
            ss = xmldb.XMLtoString(output);
            int nbrechang = xmldb.insert(ss);
        } catch (IOException | SAXException | ParserConfigurationException E) {
            // TODO Auto-generated catch block
            E.printStackTrace();
        }

        try {
            FileUtils.cleanDirectory(file);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
});

這確實假設您沒有更新基於Swing的UI(我找不到任何證據)

然后,您可以簡單地使用java.util.TimerExecutor上安排下載請求,直到隊列中的所有其他先前任務完成后才執行

Timer timer = new Timer("Download Timer");
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        executor.execute(new DownloadRunnable());
    }
}, 0, TIMER_DELAY);

其中DownloadRunnable只是您的Runnable實現的一類

public class DownloadRunnable implements Runnable {

    @Override
    public void run() {
        FTPFileDownloader ftpdown = new FTPFileDownloader();
        try {
            ftpdown.downloadFiles(Configuration.array.get(0), Configuration.array.get(3), Configuration.array.get(4), Configuration.array.get(5), Configuration.array.get(6));
        } catch (IOException e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }

        XmlToDB xmldb = new XmlToDB();
        ReadFilesFromFolder readfiles = new ReadFilesFromFolder();
        File file = new File("C:\\FTP_CLIENT_DIRECTORY\\");
        ArrayList<File> output = readfiles.listFilesForFolder(file, true, "");
        ArrayList<String> ss = null;
        try {
            ss = xmldb.XMLtoString(output);
            int nbrechang = xmldb.insert(ss);
        } catch (IOException | SAXException | ParserConfigurationException E) {
            // TODO Auto-generated catch block
            E.printStackTrace();
        }

        try {
            FileUtils.cleanDirectory(file);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM