[英]how to separate tasks in javax.swing.Timer?
我正在編寫程序以完成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.Timer
在Executor
上安排下載請求,直到隊列中的所有其他先前任務完成后才執行
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.