将进度任务嵌套到一个进度条javafx中

时间:2017-10-10 13:20:51

标签: javafx task

是否可以在一个进度条中呈现2个嵌套任务的进度? 我的意思是,如果我必须从几个目录中的几个文件中读取行。我有这个代码段:

编辑:

final int steps = directories.size();
    Task<Integer> task2 = new Task<Integer>() {

                /**
                 */
                @Override
                protected Integer call() throws Exception {

                    int len = files.length;
                    updateProgress(0, len);

                    for(int i = 0; i < files.length; i++) {
                        final String filename = files[i].getName();
                        final String file = files[i].getPath();     

                        try {
                            BufferedReader br = new BufferedReader(new FileReader(file));
                            }

                            String currentLine = null;

                            while ((currentLine = br.readLine()) != null) {

                                readlines(currentLine, filename);
                            }

                        } catch (IOException xs) {
                            xs.getMessage();
                        } 

                        System.out.println("******* Working on: " + file +  " ******************************");
                        updateProgress(i + 1, files.length);
                    }   

                    System.out.println("done: " + directoryName);

                    return len;
                }
            };  

    task2.setOnRunning(r -> {
                DoubleBinding totalProgress = null;

                for(int i = 0; i < steps; i++) {    
                    DoubleBinding increment = task2.progressProperty().divide(steps);

                    if (totalProgress == null) {
                        totalProgress = increment;
                    } else {
                        totalProgress = totalProgress.add(increment);
                    }
                }

                progressBar.progressProperty().bind(totalProgress);
                status.textProperty().bind(task2.stateProperty().asString());
                statusProcess.textProperty().bind(Bindings.when(totalProgress.isEqualTo(-1))
                        .then("0.00")
                        .otherwise(task2.progressProperty().multiply(100.00).asString("%.02f %%")));

                console.textProperty().bind(task2.messageProperty());

            });

    new Thread(task2).start();

我可以访问进度条但是只要我有目录,进度条将重新启动到0并将文件检入下一个目录然后填充进度条直到1然后重新启动到0如果有另一个目录。

如果我想在一个中显示这两个任务,我该怎么办,因为我不想在下一个目录读取时从0重新启动。如果我有4个目录,我希望看到将进度条移动到其四分之一,依此类推。

有人知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您可以执行类似

的操作
/home

如果您可以轻松估算或计算每项任务的相对时间,您可以相应地对每项任务的进度进行加权,而不是像上面的代码那样简单地对它们求平均值。