【发布时间】:2015-10-22 10:41:36
【问题描述】:
所以,我有一个非常简单的应用程序,它应该处理下载某些文件并将它们更新到某个目录。该应用程序有一个简单的界面和一个状态栏,它应该告诉用户下载过程是如何进行的。到目前为止,一切顺利。
我有一些扩展 javafx.concurrent.Task 类的类实现。这些类处理每个系统的文件下载和保存,并照顾每个系统的特殊性。下载过程本身(实际上来自远程数据库)对每个人都是一样的,因此,它在另一个名为 FileDownloader 的类中实现,因为它自然应该是可重用的。
因此,我们有一个带有 call() 方法的 UpdateTask 类,该方法又调用 FileDownloader 类中的某些方法。
问题是:我需要将 progressProperty 绑定到栏,但只有 UpdateTask 有这个属性,而我想在栏中显示的大部分工作在 FileDownloader 内完成。我无法从下载方法中调用 updateProgress,因为它不在 Task 类中。我无法将任务传递给方法并在那里调用更新方法。我无法在进度属性上创建监听器并监听下载器类中字段的更改。似乎我无能为力,唯一真正的解决方案是计算 call() 方法中正在完成的工作。不幸的是我。
是否有不涉及我编写可重用代码较少的解决方案?示例代码如下:
public class UpdateTask extends Task<Void> {
@Override
protected Void call() throws Exception {
//some other operations are performed before this part
FileDownloader downloader = new FileDownloader();
//The stuff I wanna count is in there :(
boolean isDownloaded = downloader.downloadSysVersion();
//some other stuff happens that depends on the completion of the download
}
向我展示如何从 downloadSysVersion 方法中获取信息的人将获得免费的互联网 cookie。
【问题讨论】:
标签: java multithreading user-interface javafx progress-bar