我正在制作一个允许用户远程解决问题的JavaFX桌面应用程序。它将文件下载到云存储并从那里上传结果(这看起来有点奇怪,但现在不是这样)。
我有一个代表问题的类(Model)和一个Controller类,它定期访问云。我借助云存储API中的ProgressListener类跟踪下载/上传每个问题的进度。我为列表中的每个问题都需要一个单独的实例(以便它们可以同时下载),因此我在Problem类中为进度监听器创建了一个实例变量。问题是,在每次下载/上传结束时,我需要执行一些操作(比如与云存储交谈),并在问题类中编写所有这些代码(或者甚至调用Controller方法),而不是# 39;对我来说似乎是个好主意。
问题类看起来像这样:
public class Problem {
private SimpleIntegerProperty progress;
private ProgressListener progressListener;
public Problem() {
progressListener = new ProgressListener() {
@Override
public void updateProgress(int bytes,int total) {
progress.set(bytes);
if (bytes==total) {
// do smth in cloud storage
}
}
}
}
}
我的问题是如何正确实施这种互动。
答案 0 :(得分:0)
我认为控制器类是跟踪下载进度的自然场所。 所以我会创建进度监听器:
public class Controller {
public ProgressListener createProgressListener(Problem problem, Consumer<Problem> onDownloadComplete) {
return new ProgressListener() {
@Override
public void updateProgress(int bytes, int total) {
if (bytes == total) {
onDownloadComplete.accept(problem);
}
}
};
}
}