gpt4 book ai didi

java - 如何在 javax.swing.Timer 中分离任务?

转载 作者:行者123 更新时间:2023-11-29 03:03:41 27 4
gpt4 key购买 nike

我正在编写一个程序来完成 3 个任务:

  1. 使用 ftp 从远程文件夹将 xml 文件下载到本地文件夹。
  2. 阅读并处理文件。
  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.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();
}

}
}

关于java - 如何在 javax.swing.Timer 中分离任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com