首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用任务的updateProgress

调用任务的updateProgress
EN

Stack Overflow用户
提问于 2014-05-16 17:51:05
回答 1查看 2.2K关注 0票数 2

我在看类任务的文档

代码语言:javascript
复制
    final Task<Void> task = new Task<Void>() {
        @Override public Void call() {
            for(int i=0;i<datesAndStudies.length;i++){
                updateProgress(i,datesAndStudies.length);
                DoSomething something = new DoSomething();
                something.VeryLongAndTimeConsumingMethod(i);
            }
            return null;
        }
    };

我注意到,updateProgress是受保护的,工作完成/汇总工作都被定义为公共最终ReadOnlyDoubleProperty

是否有一种方法/解决方法可以更新/调用updateProgress或从类DoSomething中的方法: VeryLongAndTimeConsumingMethod(int )编辑这些值(工作完成/总计工作)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-16 18:27:48

即使updateProgress(...)是公共的,您也必须将对Task的引用传递给您的DoSomething类,这会创建一些非常难看的耦合。如果在Task实现和DoSomething类之间存在这种级别的耦合,那么最好在Task子类本身中定义长的、耗时的方法,并去掉另一个类:

代码语言:javascript
复制
final Task<Void> task = new Task<Void>() {
    @Override
    public Void call() {
        for (int i=0; i<datesAndStudies.length; i++) {
            veryLongAndTimeConsumingMethod(i);
        }
        return null ;
    }

    private void veryLongAndTimeConsumingMethod(int i) {
        // do whatever...
        updateProgress(...);
    }
};

为了保持您的解耦,只需定义一个表示DoSomething进度的DoSomething,并从Task中观察它,当它发生变化时调用updateProgress(...)

代码语言:javascript
复制
public class DoSomething {
    private final ReadOnlyDoubleWrapper progress = new ReadOnlyDoubleWrapper(this, "progress");
    public double getProgress() {
        return progress.get();
    }
    public ReadOnlyDoubleProperty progressProperty() {
        return progress.getReadOnlyProperty();
    }
    public void veryLongAndTimeConsumingMethod(int i) {
        // ..
        progress.set(...);
    }
}

然后:

代码语言:javascript
复制
final Task<Void> task = new Task<>() {
    @Override
    public Void call() {
        for (int i=0; i<datesAndStudies.length; i++) {
            DoSomething something = new DoSomething();
            something.progressProperty().addListener(
                (obs, oldProgress, newProgress) -> updateProgress(...));
            something.veryLongAndTimeConsumingMethod();
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23701639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档