作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序来完成 3 个任务:
我使用 javax.swing.Timer 定期重复。</p>
我想阻止任务 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();
}
}
}
关于java - 如何在 javax.swing.Timer 中分离任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337096/
我是一名优秀的程序员,十分优秀!